Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Hibernate — nie udało się leniwie zainicjować kolekcji ról:beans.Language.patients, nie można zainicjować serwera proxy — brak sesji

Twój konwerter json próbuje serializować całą jednostkę, która zawiera listę wszystkich pacjentów mówiących w każdym języku. Z tego, co zrozumiałem, lista pacjentów w json nie jest oczekiwana. Masz więc trzy opcje (w kolejności, w jakiej je rozważę):

  • Usuń mapowanie do pacjentów w jednostce Język. Potrzebujesz dostępu do pacjentów z jednostki językowej? Jeśli nie, usuń to mapowanie.
  • Utwórz językową DTO, w której przesyłasz dane przed opuszczeniem warstwy tx. W ten sposób każdy, kto dzwoni do usługi, nigdy nie otrzyma wyjątku LazyInitException. Nic dziwnego:pola DTO są zawsze ustawiane chętnie.
  • Skonfiguruj konwerter json, aby nie serializować pól pacjenta. Nie powiedziałeś, której biblioteki json używasz. Niektóre z nich zawierają adnotację, aby zignorować niektóre pola (@JsonIgnore dla przykładu Jackson), inne wymagają konfiguracji Java.

Aby zastosować pierwsze rozwiązanie, zaktualizuj te pliki w ten sposób:

Język.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>

Język.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;
    }
}

Zaktualizowałem konstruktor bezargumentowy i setId metoda protected . Możesz nawet zaktualizować je do private :tylko hibernacja powinna ich używać (i może używać prywatnych pól / metod).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:porównanie wartości całkowitej i pola tekstowego z indeksem

  2. Importowanie danych z bazy danych MySQL do ramki danych Pandas, w tym nazw kolumn

  3. .Net Core 2.0 Database First Approach Scaffold-DbContext bazy danych Mysql

  4. Oblicz decyla w MySQL na podstawie sum

  5. MySQL — wyzwalacz aktualizacji tej samej tabeli po wstawieniu