Mysql
 sql >> база данни >  >> RDS >> Mysql

Hibernate- не успя да инициализира мързеливо колекция от роли:beans.Language.patients, не можа да инициализира прокси - няма сесия

Вашият json конвертор се опитва да сериализира целия обект, който съдържа списъка на всички пациенти, говорещи всеки език. От това, което разбрах, списъкът с пациенти в json не се очаква. Така че имате три опции (подредени, в които бих ги разгледал) :

  • Премахнете съпоставянето с пациенти в обект език. Трябва ли да получите достъп до пациенти от езиковата единица? Ако не, премахнете това съпоставяне.
  • Създайте езикова DTO, където прехвърляте данните си, преди да излезете от слоя tx. По този начин всеки, който се обади на услугата, никога няма да получи LazyInitException. Не е изненада:DTO полетата винаги се задават с нетърпение.
  • Конфигурирайте вашия json конвертор да не сериализира полетата на пациента. Не сте казали коя json библиотека използвате. Някои от тях ви дават анотация, за да игнорирате някои полета (@JsonIgnore за Джаксън например), други изискват конфигурация на 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 :само hibernate трябва да ги използва (и може да използва частни полета/методи).



  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 файл в MySql чрез команден ред

  2. enum('yes', 'no') срещу tinyint - кой да използвам?

  3. MYSQL - Извличане на времеви печати между датите

  4. Групово копиране на DataTable в MySQL (подобно на System.Data.SqlClient.SqlBulkCopy)

  5. Mysql заявка за извличане на домейни от URL адреси