sql >> Databasteknik >  >> RDS >> Mysql

Hibernate- misslyckades med att slöa initiera en samling roller:beans.Language.patients, kunde inte initiera proxy - ingen session

Din json-konverterare försöker serialisera hela enheten, som innehåller listan över alla patienter som talar varje språk. Vad jag förstod förväntas inte patientlistan i json. Så du har tre alternativ (i vilken jag skulle överväga dem) :

  • Ta bort mappningen till patienter i språkenheten. Behöver du få tillgång till patienter från språkenheten? Om inte, ta bort denna mappning.
  • Skapa en språk-DTO där du överför dina data innan du lämnar TX-lagret. På så sätt kommer den som ringer tjänsten aldrig att få en LazyInitException. Ingen överraskning:DTO-fält ställs alltid in ivrigt.
  • Konfigurera din json-omvandlare för att inte serialisera patientfälten. Du har inte sagt vilken json lib du använder. Vissa av dem ger dig en anteckning för att ignorera vissa fält (@JsonIgnore för Jackson till exempel), kräver annat java-konfiguration.

För att tillämpa den första lösningen, uppdatera dessa filer på detta sätt:

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;
    }
}

Jag har uppdaterat no-arg-konstruktorn och setId metod för att protected . Du kan till och med uppdatera dem till private :endast hibernate bör någonsin använda dem (och det kan använda privata fält / metoder).



  1. JSON_UNQUOTE() – Ta bort citat från ett JSON-dokument i MySQL

  2. Skapa en webbapp från grunden med Python Flask och MySQL:Del 3

  3. SQL OVER()-satsen - när och varför är den användbar?

  4. Oracle pl-sql escape-tecken (för en ' )