Trình chuyển đổi json của bạn cố gắng tuần tự hóa toàn bộ thực thể, chứa danh sách tất cả bệnh nhân nói từng ngôn ngữ. Từ những gì tôi hiểu, danh sách bệnh nhân trong json không được mong đợi. Vì vậy, bạn có ba lựa chọn (sắp xếp theo thứ tự mà tôi sẽ xem xét chúng):
- Xóa ánh xạ tới bệnh nhân trong thực thể Ngôn ngữ. Bạn có cần truy cập bệnh nhân từ tổ chức ngôn ngữ không? Nếu không, hãy xóa ánh xạ này.
- Tạo DTO Ngôn ngữ nơi bạn chuyển dữ liệu của mình trước khi thoát khỏi lớp tx. Bằng cách này, bất kỳ ai gọi dịch vụ sẽ không bao giờ nhận được LazyInitException. Không có gì ngạc nhiên:Các trường DTO luôn được thiết lập một cách háo hức.
- Định cấu hình bộ chuyển đổi json của bạn để không tuần tự hóa các trường bệnh nhân. Bạn chưa nói bạn đang sử dụng lib json nào. Một số trong số họ cung cấp cho bạn chú thích để bỏ qua một số trường (
@JsonIgnore
cho Jackson chẳng hạn), cái khác yêu cầu cấu hình java.
Để áp dụng giải pháp đầu tiên, hãy cập nhật các tệp đó theo cách này:
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;
}
}
Tôi đã cập nhật hàm tạo no-arg và setId
phương thức để protected
. Bạn thậm chí có thể cập nhật chúng thành private
:chỉ có chế độ ngủ đông mới nên sử dụng chúng (và nó có thể sử dụng các trường / phương thức riêng tư).