Frage

<!-- Clasa Proiect-->
<class catalog="tema3" name="com.tema3.tables.Proiect" table="proiect" lazy="false">
    <id column="proiect_id" name="id">
        <generator class="native"/>
    </id>
    <property name="nume"  type="text" />

    <set name="itemList" table="proiect_item" fetch="select">
        <key column="proiect_id"/>
        <many-to-many column="item_id" unique="true" class="com.tema3.tables.Item"/>
    </set>
</class>    </class>

Das ist meine Kartierungsklasse.
Der Code in Wich, den ich eine Instanziierung nenne, lautet:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
 Query q = session.createQuery("from Proiect");
 List<Proiect> lists = HibernateUtil.listAndCast(q);
 session.getTransaction().commit();
 obj = lists;

Und das ist ListandcastMethod:

public static <T> List<T> listAndCast(Query q) {
    @SuppressWarnings("unchecked")
    List list = q.list();
    return list;
}

Und ich bekomme immer wieder:

May 2, 2011 4:38:03 PM org.hibernate.LazyInitializationException <init>
SEVERE: failed to lazily initialize a collection of role: com.tema3.tables.Proiect.itemList, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.tema3.tables.Proiect.itemList, no session or session was closed
 at   org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)

Aber die Sache ist, dass die Felder der Proiektklasse mit Ausnahme der Elemente besiedelt sind, in denen ich diese Ausnahme erhalte, aber ich möchte, dass die festgelegten Elemente besiedelt werden. Wie kann ich das tun?

War es hilfreich?

Lösung 2

Ich fand die Antwort. Es muss zur festgelegten Deklaration in der XML die Eigenschaft hinzufügen lazy="false"

Andere Tipps

Initialisieren Sie den Satz von Elementen innerhalb der listAndCast(Query q) Methode vor Rückgabe oder Aufruf a transaction.commit(). Dies kann erfolgen, indem Sie einen der Accessors auf einem Element aus den Elementen aufrufen. Dies zwingt den Winterschlaf, den Satz von Elementen zu initialisieren, anstatt eine Proxy -Liste zurückzugeben.

BEARBEITEN

 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
 session.beginTransaction();
 Query q = session.createQuery("from Proiect");
 List<Project> lists = HibernateUtil.listAndCast(q);
 if(lists != null && lists.size() > 0) {
    Set<Item> s = lists.get(0).getItemList();
    Iterator iter = s.iterator();
    while(iter.hasNext()) {
       Item item = iter.next();
       item.getSomething();
       break;
    }
 }
 session.getTransaction().commit();
 obj = lists;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top