Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ruhezustand – konnte eine Sammlung von Rollen nicht träge initialisieren:beans.Language.patients, Proxy konnte nicht initialisiert werden – keine Sitzung

Ihr json-Konverter versucht, die gesamte Entität zu serialisieren, die die Liste aller Patienten enthält, die jede Sprache sprechen. Soweit ich verstanden habe, wird die Patientenliste im JSON nicht erwartet. Sie haben also drei Optionen (in der Reihenfolge, in der ich sie in Betracht ziehen würde):

  • Entfernen Sie die Zuordnung zu Patienten in der Entität Sprache. Benötigen Sie Zugang zu Patienten von der Spracheinheit? Wenn nicht, entfernen Sie diese Zuordnung.
  • Erstellen Sie ein Sprach-DTO, in das Sie Ihre Daten übertragen, bevor Sie die TX-Schicht verlassen. Auf diese Weise erhält derjenige, der den Dienst aufruft, niemals eine LazyInitException. Kein Wunder:DTO-Felder werden immer eifrig gesetzt.
  • Konfigurieren Sie Ihren json-Konverter so, dass die Patientenfelder nicht serialisiert werden. Sie haben nicht gesagt, welche JSON-Bibliothek Sie verwenden. Einige von ihnen geben Ihnen eine Anmerkung, um einige Felder zu ignorieren (@JsonIgnore für Jackson zum Beispiel), andere erfordern eine Java-Konfiguration.

Um die erste Lösung anzuwenden, aktualisieren Sie diese Dateien folgendermaßen:

Sprache.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>

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

Ich habe den No-Arg-Konstruktor und setId aktualisiert Methode zu protected . Sie können sie sogar auf private aktualisieren :Nur Hibernate sollte sie jemals verwenden (und es kann private Felder/Methoden verwenden).