Uw json-converter probeert de hele entiteit te serialiseren, die de lijst bevat van alle patiënten die elke taal spreken. Van wat ik begreep, wordt de lijst met patiënten in de json niet verwacht. Je hebt dus drie opties (in volgorde waarin ik ze zou overwegen):
- Verwijder de toewijzing aan patiënten in de entiteit Taal. Moet u toegang krijgen tot patiënten van de taalentiteit? Als dit niet het geval is, verwijdert u deze toewijzing.
- Maak een taal-DTO waar u uw gegevens overzet voordat u de tx-laag verlaat. Op deze manier krijgt degene die de service belt nooit een LazyInitException. Geen verrassing:DTO-velden worden altijd gretig ingesteld.
- Configureer uw json-converter om de patiëntvelden niet te serialiseren. Je hebt niet gezegd welke json-lib je gebruikt. Sommigen van hen geven u een annotatie om sommige velden te negeren (
@JsonIgnore
voor Jackson bijvoorbeeld), voor andere is java-configuratie vereist.
Om de eerste oplossing toe te passen, werkt u die bestanden op deze manier bij:
Taal.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>
Taal.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;
}
}
Ik heb de no-arg constructor en setId
. geüpdatet methode naar protected
. Je kunt ze zelfs updaten naar private
:alleen slaapstand zou ze ooit moeten gebruiken (en het kan privévelden / methoden gebruiken).