Konverter json Anda mencoba membuat serial seluruh entitas, yang berisi daftar semua pasien yang berbicara setiap bahasa. Dari apa yang saya pahami, daftar pasien di json tidak diharapkan. Jadi Anda memiliki tiga opsi (diurutkan di mana saya akan mempertimbangkannya):
- Hapus pemetaan ke pasien di entitas Bahasa. Apakah Anda perlu mendapatkan akses ke pasien dari entitas bahasa? Jika tidak, hapus pemetaan ini.
- Buat DTO Bahasa tempat Anda mentransfer data sebelum keluar dari lapisan tx. Dengan cara ini siapa pun yang memanggil layanan tidak akan pernah mendapatkan LazyInitException. Tidak mengherankan :bidang DTO selalu disetel dengan penuh semangat.
- Konfigurasikan konverter json Anda untuk tidak membuat serial bidang pasien. Anda belum mengatakan json lib mana yang Anda gunakan. Beberapa dari mereka memberi Anda anotasi untuk mengabaikan beberapa bidang (
@JsonIgnore
untuk Jackson misalnya), yang lain memerlukan konfigurasi java.
Untuk menerapkan solusi pertama, perbarui file-file itu dengan cara ini :
Bahasa.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Sep 14, 2016 4:33:23 PM by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
<class name="beans.Language" table="language" catalog="myglukose" optimistic-lock="version">
<id name="idlanguage" type="java.lang.Integer">
<column name="idlanguage" />
<generator class="identity" />
</id>
<property name="language" type="string">
<column name="language" length="45" not-null="true" />
</property>
</class>
</hibernate-mapping>
Bahasa.java
public class Language implements java.io.Serializable {
private Integer idlanguage;
private String language;
protected Language() {
}
public Language(String language) {
this.language = language;
}
public Integer getIdlanguage() {
return this.idlanguage;
}
protected void setIdlanguage(Integer idlanguage) {
this.idlanguage = idlanguage;
}
public String getLanguage() {
return this.language;
}
public void setLanguage(String language) {
this.language = language;
}
}
Saya telah memperbarui konstruktor no-arg dan setId
metode untuk protected
. Anda bahkan dapat memperbaruinya ke private
:hanya hibernasi yang boleh menggunakannya (dan dapat menggunakan bidang/metode pribadi).