Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hibernate- không thể khởi tạo một cách lười biếng tập hợp vai trò:bean.Language.patients, không thể khởi tạo proxy - không có phiên

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ư).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Division sử dụng 'không tồn tại' trong mysql

  2. JPA TemporalType.Date đưa ra ngày sai

  3. MySQL thêm ngày vào một ngày

  4. Cách trả về 0 thay vì null khi sử dụng COUNT trong MySQL

  5. 24 giờ giá trị