Mysql
 sql >> Database >  >> RDS >> Mysql

Ibernazione:impossibile inizializzare pigramente una raccolta di ruoli:Beans.Language.patients, impossibile inizializzare il proxy - nessuna sessione

Il tuo convertitore json tenta di serializzare l'intera entità, che contiene l'elenco di tutti i pazienti che parlano ogni lingua. Da quello che ho capito, non è previsto l'elenco dei pazienti nel json. Quindi hai tre opzioni (ordinate in cui le considererei):

  • Rimuovi la mappatura ai pazienti nell'entità Lingua. È necessario ottenere l'accesso ai pazienti dall'entità linguistica? In caso contrario, rimuovere questa mappatura.
  • Crea un DTO di lingua in cui trasferisci i tuoi dati prima di uscire dal livello tx. In questo modo chiunque chiami il servizio non riceverà mai una LazyInitException. Nessuna sorpresa:i campi DTO sono sempre impostati avidamente.
  • Configura il tuo convertitore json per non serializzare i campi paziente. Non hai detto quale json lib stai usando. Alcuni di essi ti danno un'annotazione per ignorare alcuni campi (@JsonIgnore per Jackson ad esempio), altri richiedono la configurazione java.

Per applicare la prima soluzione, aggiorna quei file in questo modo:

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

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

Ho aggiornato il costruttore no-arg e setId metodo per protected . Puoi persino aggiornarli a private :solo Hibernate dovrebbe usarli (e può usare campi/metodi privati).