Почему List (@OneToMany) с JPA в Entity видел PersistentBag - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть две сущности следующим образом: Personel.java и PersonelEgitimDurum.java List personelEgitimDurumList - это PersistentBag в Personel, как показано ниже;

[enter image description here][1] 


  [1]: https://i.stack.imgur.com/Q3IC2.png

Personel.java следующим образом;

    @Entity
@Table(name="personel")
public class Personel extends BaseEntity {

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="kisi_id")
    private Kisi kisi;

    @Column(name="personel_tipi",length = 2,nullable = false)
    private int personelTipi;

    @Column(name="sicil_no",length = 100,nullable = false)
    private String sicilNo;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "personel", cascade =CascadeType.ALL,orphanRemoval = true)
    private List<PersonelEgitimDurum> personelEgitimDurumList= new ArrayList<PersonelEgitimDurum>();

    @Column(name="khk_onay",length = 1)
    private int khkOnay;
}

PersonelEgitimDurum.java следующим образом;

    @Entity
@Table(name = "personel_egitim_durum", indexes = {@Index(name = "index_personel_egitim_durum", columnList = "id")})
public class PersonelEgitimDurum extends BaseEntity {

    @ManyToOne(cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
    @JoinColumn(name="personel_id",nullable = false, updatable = true)
    private Personel personel;

    @Column(name = "ogrenim_durumu")
    private String ogrenimDurumu;

    @Column(name = "okul_id", length = 3)
    private Long okulId;

    @Column(name = "universite_bolum_id", length = 4)
    private Long universiteBolumId;

    @Column(name = "mezuniyet_tarihi")
    private Date mezuniyetTarihi;

    @Column(name = "aciklama", length = 500)
    private String aciklama;
}

PersonelServiceImpl.java следующим образом;

@Service
@Transactional
public class PersonelServiceImpl implements PersonelService {
@Override
    public PersonelDTO findPersonelByKimlikNo(String kimlikNo) {
        Kisi kisi=kisiDAO.findKisiByKimlikNo(kimlikNo);
        Personel personel=personelDao.findPersonelByKisi(kisi);
        PersonelDTO personelDTO=mapper.toDto(personel);
        return personelDTO;
    }
}

Проблема заключается в том, что personel из findPersonelByKimlikNo в PersonelServiceImpl включает в себя, что personelEgistimDur4Lag4Dist*.Таким образом, mapStruct не преобразует сущность в dto.

Журнал ошибок следует;

java.lang.StackOverflowError: null
at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:261) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.kktcmeb.personel.kktcmebpersonel.mapper.PersonelMapperImpl.personelEgitimDurumListToPersonelEgitimDurumDTOList(PersonelMapperImpl.java:159) ~[classes/:na]
at org.kktcmeb.personel.kktcmebpersonel.mapper.PersonelMapperImpl.toDto(PersonelMapperImpl.java:53) ~[classes/:na]
at org.kktcmeb.personel.kktcmebpersonel.mapper.PersonelMapperImpl.personelEgitimDurumToPersonelEgitimDurumDTO(PersonelMapperImpl.java:144) ~[classes/:na]
at org.kktcmeb.personel.kktcmebpersonel.mapper.PersonelMapperImpl.personelEgitimDurumListToPersonelEgitimDurumDTOList(PersonelMapperImpl.java:161) ~[classes/:na]
at org.kktcmeb.personel.kktcmebpersonel.mapper.PersonelMapperImpl.toDto(PersonelMapperImpl.java:53) ~[classes/:na]

Кто-нибудь имеет представление об этой ситуации?Пожалуйста, помогите

1 Ответ

0 голосов
/ 01 октября 2018
@Entity
@Table(name="personel")
**@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")**
        public class Personel extends BaseEntity {

            @OneToOne(cascade = CascadeType.ALL)
            @JoinColumn(name="kisi_id")
            private Kisi kisi;

            @Column(name="personel_tipi",length = 2,nullable = false)
            private int personelTipi;

            @Column(name="sicil_no",length = 100,nullable = false)
            private String sicilNo;

            @OneToMany(fetch = FetchType.EAGER, mappedBy = "personel", cascade =CascadeType.ALL,orphanRemoval = true)
            private List<PersonelEgitimDurum> personelEgitimDurumList= new ArrayList<PersonelEgitimDurum>();

            @Column(name="khk_onay",length = 1)
            private int khkOnay;
        }

ДОБАВИТЬ в главу сущностей -> @ JsonIdentityInfo (generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")

@Entity
@Table(name = "personel_egitim_durum", indexes = {@Index(name = "index_personel_egitim_durum", columnList = "id")})
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
    public class PersonelEgitimDurum extends BaseEntity {

        @ManyToOne(cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
        @JoinColumn(name="personel_id",nullable = false, updatable = true)
        private Personel personel;

        @Column(name = "ogrenim_durumu")
        private String ogrenimDurumu;

        @Column(name = "okul_id", length = 3)
        private Long okulId;

        @Column(name = "universite_bolum_id", length = 4)
        private Long universiteBolumId;

        @Column(name = "mezuniyet_tarihi")
        private Date mezuniyetTarihi;

        @Column(name = "aciklama", length = 500)
        private String aciklama;
    }
...