sql >> Databáze >  >> RDS >> Mysql

Hibernate – nepodařilo se líně inicializovat kolekci rolí:beans.Language.patients, nelze inicializovat proxy – žádná relace

Váš json převodník se snaží serializovat celou entitu, která obsahuje seznam všech pacientů mluvících jednotlivými jazyky. Z toho, co jsem pochopil, se seznam pacientů v souboru json neočekává. Takže máte tři možnosti (seřazené podle kterých bych je zvážil):

  • Odeberte mapování na pacienty v entitě Jazyk. Potřebujete získat přístup k pacientům z jazykové entity? Pokud ne, odeberte toto mapování.
  • Vytvořte jazykové DTO, kam přenesete svá data, než opustíte vrstvu TX. Tímto způsobem, kdokoli zavolá službu, nikdy nedostane výjimku LazyInitException. Žádné překvapení:Pole DTO jsou vždy nastavena dychtivě.
  • Nakonfigurujte převodník json tak, aby pole pacienta neřadil. Neřekli jste, kterou knihovnu json používáte. Některé z nich vám poskytnou anotaci k ignorování některých polí (@JsonIgnore pro Jackson například), jiný vyžaduje konfiguraci Java.

Chcete-li použít první řešení, aktualizujte tyto soubory tímto způsobem:

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

Aktualizoval jsem konstruktor no-arg a setId metoda protected . Můžete je dokonce aktualizovat na private :měla by je používat pouze hibernace (a může používat soukromá pole / metody).



  1. Generujte testovací data pomocí vývojáře Oracle PL/SQL

  2. Jak nastavit časové pásmo databáze v application.ini

  3. Mohu v dotazu připraveném JDBC použít více příkazů?

  4. Import souboru .sql na windows do postgresql