jsonコンバーターは、各言語を話すすべての患者のリストを含むエンティティ全体をシリアル化しようとします。私が理解したことから、jsonの患者のリストは期待されていません。したがって、3つのオプションがあります(私がそれらを検討する順序で):
- Languageエンティティの患者へのマッピングを削除します。言語エンティティから患者にアクセスする必要がありますか?このマッピングを削除しない場合。
- txレイヤーを終了する前にデータを転送する言語DTOを作成します。このように、サービスを呼び出す人は誰でもLazyInitExceptionを取得することはありません。当然のことながら、DTOフィールドは常に熱心に設定されています。
- 患者フィールドをシリアル化しないようにjsonコンバーターを構成します。使用しているjsonlibはまだ言っていません。それらのいくつかは、いくつかのフィールドを無視するための注釈を提供します(
@JsonIgnore
たとえば、Jacksonの場合)、その他には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
に更新することもできます :休止状態のみがそれらを使用する必要があります(プライベートフィールド/メソッドを使用できます)。