我有两个实体,如下所示:Personel.java和PersonelEgitimDurum.java 如下所示,列出personelEgitimDurumList是Personel中的PersistentBag;
[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;
}
}
问题是PersonelServiceImpl中的findPersonelByKimlikNo中的人员包括 personelEgitimDurumList是作为图像的PersistentBag 。因此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]
有人知道这种情况吗?请帮助
答案 0 :(得分:0)
@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;
}