您的json转换器尝试序列化整个实体,该实体包含使用每种语言的所有患者的列表。据我了解,json中的患者列表是不期望的。因此,您有三种选择(订购时我会考虑它们):
- 在“语言”实体中删除对患者的映射。您需要从语言实体获得患者的准入吗?如果没有,请删除此映射。
- 创建语言DTO,然后在退出tx层之前在其中传输数据。这样,无论谁调用该服务,都将永远不会收到LazyInitException。毫不奇怪:DTO字段总是设置得很热情。
- 配置您的json转换器以不序列化患者字段。您尚未说明正在使用哪个json库。其中一些为您提供注释,以忽略某些字段(
@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 /> </id> <property name="language" type="string"> <column name="language" length="45" not-null="true" /> </property> </class></hibernate-mapping>
语言.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; }}我已经将no-
arg构造函数和
setId方法更新为
protected。您甚至可以将它们更新为
private:只有hibernate状态才能使用它们(并且它可以使用私有字段/方法)。



