Org.hibernate.proxy.pojo.javassist.Javassist sınıfı için serileştirici bulunamadı?


96

Üzerinde çalışıyorum SpringMVC, Hibernateve JSONancak bu hatayı alıyorum.

HTTP Status 500 - Could not write JSON: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) ) 

Lütfen aşağıdaki Varlığımı kontrol edin

    @Entity
@Table(name="USERS")
public class User {

    @Id
    @GeneratedValue
    @Column(name="USER_ID")
    private Integer userId;

    @Column(name="USER_FIRST_NAME")
    private String firstName;

    @Column(name="USER_LAST_NAME")
    private String lastName;


    @Column(name="USER_MIDDLE_NAME")
    private String middleName;

    @Column(name="USER_EMAIL_ID")
    private String emailId;

    @Column(name="USER_PHONE_NO")
    private Integer phoneNo;

    @Column(name="USER_PASSWORD")
    private String password;

    @Column(name="USER_CONF_PASSWORD")
    private String  confPassword;

    @Transient
    private String token;

    @Column(name="USER_CREATED_ON")
    private Date createdOn;

    @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
    @Fetch(value = FetchMode.SUBSELECT)
    @JoinTable(name = "USER_ROLES", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
    private List<ActifioRoles> userRole = new ArrayList<ActifioRoles>();


    @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy="userDetails")
    @Fetch(value = FetchMode.SUBSELECT)
    private List<com.actifio.domain.Address> userAddress = new ArrayList<com.actifio.domain.Address>();

    @OneToOne(cascade=CascadeType.ALL)
    private Tenant tenantDetails;


    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmailId() {
        return emailId;
    }
    public void setEmailId(String emailId) {
        this.emailId = emailId;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getConfPassword() {
        return confPassword;
    }
    public void setConfPassword(String confPassword) {
        this.confPassword = confPassword;
    }
    public Date getCreatedOn() {
        return createdOn;
    }
    public void setCreatedOn(Date createdOn) {
        this.createdOn = createdOn;
    }

    public List<ActifioRoles> getUserRole() {
        return userRole;
    }

    public void setUserRole(List<ActifioRoles> userRole) {
        this.userRole = userRole;
    }
    public String getMiddleName() {
        return middleName;
    }
    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }
    public Integer getPhoneNo() {
        return phoneNo;
    }
    public void setPhoneNo(Integer phoneNo) {
        this.phoneNo = phoneNo;
    }

    public List<com.actifio.domain.Address> getUserAddress() {
        return userAddress;
    }
    public void setUserAddress(List<com.actifio.domain.Address> userAddress) {
        this.userAddress = userAddress;
    }
    public Tenant getTenantDetails() {
        return tenantDetails;
    }
    public void setTenantDetails(Tenant tenantDetails) {
        this.tenantDetails = tenantDetails;
    }
    public String getToken() {
        return token;
    }
    public void setToken(String token) {
        this.token = token;
    }

    }

Bunu Nasıl Çözebilirim?


Lütfen
yığın izini

Kodunuzun ne yapmaya çalıştığına dair herhangi bir bilgi sahibi olmadan, hata ayıklamak biraz zordur, ancak Jackson ve Hibernate'i kullandığınız için muhtemelen github.com/FasterXML/jackson-datatype-hibernate adresini kontrol etmek isteyeceksiniz
geoand

Bu sınıftan JSON yapmaya mı çalışıyorsunuz? Bu durumda, JSON serileştiricisi tüm özellikleri, ayrıca çoktan çoğa ilişkilerinizin HashSet'ini yazmaya çalışır; bu tembel bir başlatıcı istisnası yapar
Angelo Immediata


@ user2963481 ... Hoş ve çok yardımcı olan soru Bro.
Brain

Yanıtlar:


198

Hazırda bekletme proxy nesnesi aracılığıyla tembel yükleme ile benzer bir sorun yaşadım. Tembel yüklü özel özelliklere sahip sınıfa şu eklerle açıklama ekleyerek:

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

Proxy nesnenize JSON serileştirmesini bu ek açıklamaya bozan özellikleri ekleyebileceğinizi varsayıyorum.

Sorun, varlıkların tembel olarak yüklenmesi ve serileştirmenin tam olarak yüklenmeden önce gerçekleşmesidir.

Hibernate.initialize(<your getter method>);

3
Benim için de işe yaradı ... Bu tuhaf davranışın herhangi bir açıklaması var mı?
Victor

8
@ ankur-singhal, bu açıklamanın çağıran sınıfta DEĞİL, yuvalanmış sınıfta gerekli olduğunu vurgulamalısınız.
Darwayne

1
Yahooo ... işe yaradı. Birkaç kez denedim ve çalıştım. Birkaç yol ve BoooM denedim. Çalıştı.
Brain

2
Teşekkürler benim için de çalıştı. Bu ek açıklamayı, tembel yüklü çekirdeklere sahip diğer varlıklara erişen varlıklara eklemeniz gerekir.
Shafqat Shafi

3
Bunun sorun için doğru bir çözüm olmadığını düşünüyorum. Serileştirdiğimizde, ya alt nesnenin tamamını ya da en azından alt nesnenin birincil anahtarının sonuçta geri dönmesini bekleriz. Bu ek açıklamaları eklemek, yalnızca hatayı ortadan kaldırır, ancak size istediğiniz sonuçları sağlamaz.
Anand Vaidya

87

Bunu eklemek için aynı sorunla karşılaştım, ancak verilen cevaplar işe yaramadı. İstisnanın önerisini alıp application.properties dosyasına ekleyerek düzelttim ...

spring.jackson.serialization.fail-on-empty-beans=false

Spring Boot v1.3'ü Hibernate 4.3 ile kullanıyorum

Artık tüm nesneyi ve iç içe geçmiş nesneleri serileştiriyor.

DÜZENLEME: 2018

Bu hala yorum aldığından burada açıklayacağım. Bu kesinlikle yalnızca hatayı gizler. Performans etkileri burada. O zamanlar, daha sonra teslim etmek ve üzerinde çalışmak için bir şeye ihtiyacım vardı (bunu artık yayı kullanmayarak yaptım). Yani evet, sorunu gerçekten çözmek istiyorsanız başka birini dinleyin. Şimdilik sadece gitmesini istiyorsanız, devam edin ve bu cevabı kullanın. Bu berbat bir fikir ama senin için işe yarayabilir. Kayıt için, bundan sonra bir daha asla çökme veya sorun yaşamadım. Ama muhtemelen bir SQL performans kabusu haline gelen şeyin kaynağıydı.


8
Sorunu çözer ancak json iki ekstra gereksiz özellik içerecek"handler":{},"hibernateLazyInitializer":{}
prettyvoid

harika! burada da düzeltildi, cevap bu
Hinotori

@prettyvoid Neden bu ekstra özellikler var?
Robert Ay

13
@RobertMoon Onlardan kurtulmak istiyorsanız, varlığınıza not ekleyebilirsiniz@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
prettyvoid

@prettyvoid Teşekkürler. Başka bir çözüm buldum, LAZY'yi EAGER'a değiştirmek. Bir performansı etkiler mi?
Robert Ay

71

Önceki yanıtlarda doğru bir şekilde önerildiği gibi, geç yükleme, nesnenizi veritabanından getirdiğinizde, iç içe geçmiş nesnelerin alınmayacağı (ve gerektiğinde daha sonra getirilebileceği) anlamına gelir.

Şimdi Jackson, yuvalanmış nesneyi serileştirmeye çalışıyor (== JSON'u ondan çıkarıyor), ancak normal nesne yerine JavassistLazyInitializer'ı bulduğu için başarısız oluyor. Bu gördüğünüz hatadır. Şimdi, nasıl çözülür?

Daha önce CP510 tarafından önerildiği gibi, bir seçenek, hatayı bu yapılandırma satırı ile bastırmaktır:

spring.jackson.serialization.fail-on-empty-beans=false

Ama bu semptomlarla ilgileniyor, nedeni değil . Zarif bir şekilde çözmek için, bu nesneye JSON'da ihtiyacınız olup olmadığına karar vermeniz gerekiyor mu?

  1. JSON'da nesneye ihtiyacınız varsa, FetchType.LAZYseçeneği buna neden olan alandan kaldırın (bu, yalnızca getirdiğiniz kök varlıkta değil, bazı iç içe nesnelerde de bir alan olabilir).

  2. Nesneye JSON'da ihtiyacınız yoksa, bu alanın alıcısına (veya gelen değerleri de kabul etmeniz gerekmiyorsa alanın kendisine) @JsonIgnoreörneğin aşağıdakilerle açıklama ekleyin:

    // this field will not be serialized to/from JSON @JsonIgnore private NestedType secret;

Daha karmaşık ihtiyaçlarınız varsa (örneğin, aynı varlığı kullanan farklı REST denetleyicileri için farklı kurallar), jackson görünümlerini veya filtrelemeyi kullanabilir veya çok basit kullanım için iç içe geçmiş nesneleri ayrı ayrı alabilirsiniz.


16
Bu en iyi cevap. Sorunun kökenini ele alın, bir sonraki programcının uğraşması gereken semptomları maskelemekle yetinmeyin.
Andrew

2
Kahramanımsın.
Lay Leangsros

Hatanın arkasındaki nedeni açıkladığınız ve mantıklı iki çözüm sunduğunuz için çok teşekkür ederim
Mauricio Poppe

Bunun için teşekkürler, ancak springfox- RangeError: Maximum call stack size exceeded
swagger'ın

19

Hibernate lazy-loading ile ilgilenen Jackson eklenti modülünü kullanabilirsiniz.

3. ve 4. hazırda bekletmeyi ayrı ayrı destekleyen https://github.com/FasterXML/jackson-datatype-hibernate hakkında daha fazla bilgi .


8
Bu gerçekten doğru cevap olmalı. Diğer tüm cevaplar sorunu çözmek yerine sorunu gizliyor.
Ahmed Hassanien

Ama bu modül nasıl kullanılır? bunun için herhangi bir rehber var mı?
Anand Vaidya

Jackson-datatype-hibernate'i yapılandırma yolları: stackoverflow.com/q/33727017
Chase

13

Bence problem, varlığı geri alma yolunuz.

Belki böyle bir şey yapıyorsun:

Person p = (Person) session.load(Person.class, new Integer(id));

getBunun yerine yöntemi kullanmayı deneyinload

Person p = (Person) session.get(Person.class, new Integer(id));

Sorun şu ki, yükleme yöntemiyle yalnızca bir proxy elde edersiniz, ancak gerçek nesneyi alamazsınız. Proxy nesnesi önceden yüklenmiş özelliklere sahip değildir, bu nedenle serileştirme gerçekleştiğinde serileştirilecek özellik yoktur. Get yöntemi ile aslında gerçek nesneyi elde edersiniz, bu nesne aslında serileştirilebilir.


2
FindOne yerine getOne kullandığımda bana çok benzer bir hata oldu. Benim durumumda, arayüz depom JpaRepository'yi genişletiyordu. findOne, herhangi bir Json ek açıklaması veya application.properties'te değişiklik olmadan iyi çalıştı
James Freitas

James Freitas gibi, ben de getOne'ın soruna yol açtığını ve bunun yerine örneğin findById kullanımının sorunu uygulama özelliklerinde ek açıklamayı veya yukarıda verilen satırı kullanmadan çözdüğünü buldum
MY

1
İş arkadaşım beni açıklığa kavuşturdu ve şunu söyledi: "Temel fark, getOne'ın tembel yüklenmesi ve findOne'ın olmamasıdır" - yani, açıkçası, eski veri satırlarını db'den almıyor, sadece referanslar oluşturuyor. İkincisi, bunun yerine aslında satır alır, ki bu genellikle arzu edilen durumdur
MY

@JamesFreitas EVET! Teşekkür ederim! Ve James'i bu güzel sonuca götürdüğün için teşekkürler Carlos!
Filip Savic

9

benim için çalışıyor

@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})

Örneğin

@Entity
@Table(name = "user")
@Data
@NoArgsConstructor
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private Date created;

}

5

Sorunu çözmenin iki yolu vardır.

Yol 1 :

Ekle spring.jackson.serialization.fail-on-empty-beans=falseiçine application.properties

Yol 2 :

join fetchAna nesne verilerini almak için JPQL sorgusunda kullanın , aşağıya bakın:

@Query(value = "select child from Child child join fetch child.parent Parent ",
           countQuery = "select count(*) from Child child join child.parent parent ")
public Page<Parent> findAll(Pageable pageable); 

Teşekkürler! İlk çözüm harika!
Lucas Moyano Angelini

Yol 1. Harika. Teşekkür ederim.
Lay Leangsros

3

Benim için çalışan bu Ek Açıklamayı Varlık Sınıfına (Model) ekleyin, bu, hazırda bekletme proxy nesnesi aracılığıyla geç yüklemeye neden olur.

@JsonIgnoreProperties ({"hibernateLazyInitializer", "işleyici"})


2

Bu İstisna

org.springframework.http.converter.HttpMessageNotWritableException

çünkü, umarım yanıt çıktısını Serializable nesne olarak gönderiyorsunuz.
Bu ilkbaharda meydana gelen bir sorundur. Bu sorunun üstesinden gelmek için POJO nesnesini yanıt çıktısı olarak gönderin.

Misal :

    @Entity
    @Table(name="user_details")
    public class User implements Serializable{

        @Id
        @GeneratedValue(strategy= GenerationType.IDENTITY)
        @Column(name="id")
        private Integer id;

        @Column(name="user_name")
        private String userName;

        @Column(name="email_id")
        private String emailId;

        @Column(name="phone_no")
        private String phone;

//setter and getters

POJO sınıfı:

public class UserVO {

    private int Id;
    private String userName;
    private String emailId;
    private String phone;
    private Integer active;

//setter and getters

Denetleyicide serilize edilebilir nesne alanlarını POJO sınıf alanlarına dönüştürür ve pojo sınıfını çıktı olarak döndürür.

         User u= userService.getdetials(); // get data from database

        UserVO userVo= new UserVO();  // created pojo class object

        userVo.setId(u.getId());
        userVo.setEmailId(u.getEmailId());
        userVo.setActive(u.getActive());
        userVo.setPhone(u.getPhone());
        userVo.setUserName(u.getUserName());
       retunr userVo;  //finally send pojo object as output.

Evet ben aynı şeyi, ama hatta aynı hatayı alıyorum aynı ben am yapıyor, ben başka bir şey değildir verileri ilişkili nesneleri gönderiyorum çünkü Varlık sınıfları kuruyorum
Pra_A

2

Hazırda Bekletme 5.2 ve üzerinde, hazırda bekletme proxy'sini aşağıdaki gibi kaldırabilirsiniz, bu size asıl nesneyi verecektir, böylece onu doğru şekilde seri hale getirebilirsiniz:

Object unproxiedEntity = Hibernate.unproxy( proxy );

Hibernate.initializeönceden de otomatik olarak arayacaktır .
Sam YC

@Tim, json serileştirmeden önce eklenmelidir. Sorun, serileştirme sırasında bulunan hazırda bekletme proxy nesnesi olduğu için ortaya çıkıyor, bu nedenle bir kez kaldırıldıktan sonra serileştirme iyi olacak. Yaylı denetleyici kullanıyorsanız, denetleyici bitmeden bunu yapmanız gerekir.
Sam YC

1

Hazırda bekletme için, geç yüklenen nesnelerle JSON serileştirme / seriyi kaldırma işlemini gerçekleştirmek için jackson-veri türü-hazırda bekletme projesini kullanabilirsiniz.

Örneğin,

import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonDatatypeHibernate5Configuration {

    // Register Jackson Hibernate5 Module to handle JSON serialization of lazy-loaded entities
    // Any beans of type com.fasterxml.jackson.databind.Module are automatically
    // registered with the auto-configured Jackson2ObjectMapperBuilder
    // https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
    @Bean
    public Module hibernate5Module() {
        Hibernate5Module hibernate5Module = new Hibernate5Module();
        hibernate5Module.enable( Hibernate5Module.Feature.FORCE_LAZY_LOADING );
        hibernate5Module.disable( Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION );
        return hibernate5Module;
    }
}

Bunu kullanırsam, o zaman alırım can't parse JSON. Raw result:. Herhangi bir yardım?
Pra_A

1

Çözüm, @marco'nun aşağıdaki çözümünden ilham almıştır. Cevabını da bu verilerle güncelledim.

Buradaki sorun, Jackson'ın tam gelişmiş nesneler yerine yalnızca hazırda bekletme proxy'lerini bulduğu alt nesnelerin tembel yüklenmesi ile ilgilidir.

Bu yüzden iki seçeneğimiz kaldı - burada en çok oylanan cevapta yukarıda yapıldığı gibi istisnayı bastırın veya LazyLoad nesnelerinin yüklendiğinden emin olun.

İkinci seçenekle gitmeyi seçerseniz, çözüm kullanmak olacaktır. jackson-veri türü kitaplığını ve kitaplığı serileştirmeden önce geç yük bağımlılıklarını başlatmak için yapılandırmak olacaktır.

Bunu yapmak için yeni bir yapılandırma sınıfı ekledim.

@Configuration
public class JacksonConfig extends WebMvcConfigurerAdapter {

@Bean
@Primary
public MappingJackson2HttpMessageConverter jacksonMessageConverter(){
    MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
    ObjectMapper mapper = new ObjectMapper();
    Hibernate5Module module = new Hibernate5Module();
    module.enable(Hibernate5Module.Feature.FORCE_LAZY_LOADING);
    mapper.registerModule(module);
    messageConverter.setObjectMapper(mapper);
    return messageConverter;
}

}

@Primary başka hiçbir fasulyeyi başlatmak için başka hiçbir Jackson yapılandırmasının kullanılmamasını sağlar. @Beanher zamanki gibi. module.enable(Hibernate5Module.Feature.FORCE_LAZY_LOADING);bağımlılıkların Lazy yüklemesini etkinleştirmektir.

Dikkat - Lütfen performans üzerindeki etkisine dikkat edin. bazen EAGER getirmesi yardımcı olur, ancak istekli olsanız bile, bu koda ihtiyacınız olacak, çünkü proxy nesneleri hala diğer tüm Eşlemeler için mevcuttur.@OneToOne

Not: Genel bir yorum olarak, Json yanıtında tüm veri nesnesini geri gönderme pratiğini caydırırım, Biri bu iletişim için Dto'ları kullanmalı ve bunları haritalamak için mapstruct gibi bir eşleyici kullanmalıdır. Bu, sizi yanlışlıkla güvenlik açıklarından ve yukarıdaki istisnalardan kurtarır.


1

Şu anda aynı problem bende. Bir @jsonIQgnore ile getirmeyi tembel olarak düzeltirseniz kontrol edin

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="teachers")
@JsonIgnoreProperties("course")
Teacher teach;

Sadece "(fetch = ...)" veya "@jsonIgnore" ek açıklamasını silin ve çalışacaktır

@ManyToOne
@JoinColumn(name="teachers")
@JsonIgnoreProperties("course")
Teacher teach;

0

Veya eşleyiciyi şu şekilde yapılandırabilirsiniz:

// geç yükleme için özel yapılandırma

public static class HibernateLazyInitializerSerializer extends JsonSerializer<JavassistLazyInitializer> {

    @Override
    public void serialize(JavassistLazyInitializer initializer, JsonGenerator jsonGenerator,
            SerializerProvider serializerProvider)
            throws IOException, JsonProcessingException {
        jsonGenerator.writeNull();
    }
}

ve eşleyiciyi yapılandırın:

    mapper = new JacksonMapper();
    SimpleModule simpleModule = new SimpleModule(
            "SimpleModule", new Version(1,0,0,null)
    );
    simpleModule.addSerializer(
            JavassistLazyInitializer.class,
            new HibernateLazyInitializerSerializer()
    );
    mapper.registerModule(simpleModule);

0

Soruna neden olan Hazırda Beklet varlık ilişkiniz olabilir ... ilgili varlığın tembel yüklenmesini durdurun ... örneğin ... Aşağıda, customerType için lazy = "false" ayarlayarak çözdüm.

<class name="Customer" table="CUSTOMER">
        <id name="custId" type="long">
            <column name="CUSTID" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="phone" type="java.lang.String">
            <column name="PHONE" />
        </property>
        <property name="pan" type="java.lang.String">
            <column name="PAN" />
        </property>

        <many-to-one name="customerType" not-null="true" lazy="false"></many-to-one>
    </class>
</hibernate-mapping>

1
Lütfen postanızda gerçek hayattaki uygulamada çok tehlikeli çözüm olabileceğini bildiriniz.
panurg

0

Değiştim (Ek açıklama modeli sınıfında)

fetch = FetchType.LAZY

-e

fetch = FetchType.EAGER

ve güzel bir şekilde çalıştı ...

Sevdim.


5
Bu sorunu çözerken çok tehlikelidir. fetchBir modeldeki stratejiyi değiştirmenin performansta çeşitli sonuçları vardır. Bu değişiklikle, veritabanından çok daha fazla veri getiriyorsunuz. Geçerli bir çözüm olabilir, ancak önce bir performans çalışmasına ihtiyaç vardır.
João Menighin

1
Model olduğunuzu biliyorsanız ve ilgili birçok varlığa sahip değilseniz, tam bir varlık elde etmek için biraz mem ve performans harcayabilirsiniz. ancak bunun her zaman en iyisi olduğunu bilmek güzel, tembel getirme
Sham Fiorin

0

Bu, Jackson ile ilgili bir sorundur. Bunu önlemek için, Jackson'a yuvalanmış ilişkiyi veya yuvalanmış sınıfı serileştirmemesi talimatını verin.

Aşağıdaki örneğe bakın. Şehir , Eyalet ve Ülke sınıflarıyla eşlenen adres sınıfı ve Eyaletin kendisi Bölgeyi gösteren Ülke ve Ülkeyi işaret ediyor. Spring boot REST API aracılığıyla adres değerlerini aldığınızda yukarıdaki hatayı alırsınız. Bunu önlemek için, sadece serialize eşlenen sınıf (ki seviyesini bir JSON yansıtan) ve iç içe ilişkileri görmezden , ve @JsonIgnoreProperties(value = {"state"})@JsonIgnoreProperties(value = {"country"})@JsonIgnoreProperties(value = {"region"})

Bu, yukarıdaki hata ile birlikte Lazyload istisnasını önleyecektir. Aşağıdaki kodu örnek olarak kullanın ve model sınıflarınızı değiştirin.

Address.java

@Entity
public class Address extends AbstractAuditingEntity
{
    private static final long serialVersionUID = 4203344613880544060L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "street_name")
    private String streetName;

    @Column(name = "apartment")
    private String apartment;

    @ManyToOne
    @JoinColumn(name = "city_id")
    @JsonIgnoreProperties(value = {"state"})
    private City city;

    @ManyToOne
    @JoinColumn(name = "state_id")
    @JsonIgnoreProperties(value = {"country"})
    private State state;

    @ManyToOne
    @JoinColumn(name = "country_id")
    @JsonIgnoreProperties(value = {"region"})
    private Country country;

    @ManyToOne
    @JoinColumn(name = "region_id")
    private Region region;

    @Column(name = "zip_code")
    private String zipCode;

    @ManyToOne
    @JoinColumn(name = "address_type_id", referencedColumnName = "id")
    private AddressType addressType;

}

City.java

@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "city")
@Cache(region = "cityCache",usage = CacheConcurrencyStrategy.READ_WRITE)
@Data
public class City extends AbstractAuditingEntity
{
    private static final long serialVersionUID = -8825045541258851493L;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    //@Length(max = 100,min = 2)
    private String name;


    @ManyToOne
    @JoinColumn(name = "state_id")
    private State state;
}

State.java

@Entity
@Table(name = "state")
@Data
@EqualsAndHashCode(callSuper = true)
public class State extends AbstractAuditingEntity
{
    private static final long serialVersionUID = 5553856435782266275L;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "code")
    private String code;

    @Column(name = "name")
    @Length(max = 200, min = 2)
    private String name;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "country_id")
    private Country country;

}

Country.java

@Entity
@Table(name = "country")
@Data
@EqualsAndHashCode(callSuper = true)
public class Country extends AbstractAuditingEntity
{
    private static final long serialVersionUID = 6396100319470393108L;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    @Length(max = 200, min = 2)
    private String name;

    @Column(name = "code")
    @Length(max = 3, min = 2)
    private String code;

    @Column(name = "iso_code")
    @Length(max = 3, min = 2)
    private String isoCode;

    @ManyToOne
    @JoinColumn(name = "region_id")
    private Region region;
}

0

@JsonIgnoreProperties ({"hibernateLazyInitializer", "işleyici"})

benim için çalışıyor


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.