Вашият json конвертор се опитва да сериализира целия обект, който съдържа списъка на всички пациенти, говорещи всеки език. От това, което разбрах, списъкът с пациенти в json не се очаква. Така че имате три опции (подредени, в които бих ги разгледал) :
- Премахнете съпоставянето с пациенти в обект език. Трябва ли да получите достъп до пациенти от езиковата единица? Ако не, премахнете това съпоставяне.
- Създайте езикова DTO, където прехвърляте данните си, преди да излезете от слоя tx. По този начин всеки, който се обади на услугата, никога няма да получи LazyInitException. Не е изненада:DTO полетата винаги се задават с нетърпение.
- Конфигурирайте вашия json конвертор да не сериализира полетата на пациента. Не сте казали коя json библиотека използвате. Някои от тях ви дават анотация, за да игнорирате някои полета (
@JsonIgnore
за Джаксън например), други изискват конфигурация на Java.
За да приложите първото решение, актуализирайте тези файлове по следния начин:
Language.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>
Language.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;
}
}
Актуализирах конструктора без аргументи и setId
метод за protected
. Можете дори да ги актуализирате до private
:само hibernate трябва да ги използва (и може да използва частни полета/методи).