Twój konwerter json próbuje serializować całą jednostkę, która zawiera listę wszystkich pacjentów mówiących w każdym języku. Z tego, co zrozumiałem, lista pacjentów w json nie jest oczekiwana. Masz więc trzy opcje (w kolejności, w jakiej je rozważę):
- Usuń mapowanie do pacjentów w jednostce Język. Potrzebujesz dostępu do pacjentów z jednostki językowej? Jeśli nie, usuń to mapowanie.
- Utwórz językową DTO, w której przesyłasz dane przed opuszczeniem warstwy tx. W ten sposób każdy, kto dzwoni do usługi, nigdy nie otrzyma wyjątku LazyInitException. Nic dziwnego:pola DTO są zawsze ustawiane chętnie.
- Skonfiguruj konwerter json, aby nie serializować pól pacjenta. Nie powiedziałeś, której biblioteki json używasz. Niektóre z nich zawierają adnotację, aby zignorować niektóre pola (
@JsonIgnore
dla przykładu Jackson), inne wymagają konfiguracji Java.
Aby zastosować pierwsze rozwiązanie, zaktualizuj te pliki w ten sposób:
Język.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>
Język.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;
}
}
Zaktualizowałem konstruktor bezargumentowy i setId
metoda protected
. Możesz nawet zaktualizować je do private
:tylko hibernacja powinna ich używać (i może używać prywatnych pól / metod).