Question

<!-- 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>

qui est ma classe de cartographie.
le code dans wich j'appelle une instanciation est:

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

et c'est listandCastMethod:

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

Et je garde un geting:

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)

mais la chose est que les champs de la classe Proiect sont renseignés à l'exception des articles définis où je reçois cette exception, mais je veux les éléments définis comme populated.How puis-je faire?

Était-ce utile?

La solution 2

J'ai trouvé les besoins de answer.It à ajouter à la déclaration définie dans le fichier XML de la propriété lazy="false"

Autres conseils

Initialiser l'ensemble des éléments à l'intérieur de la méthode de listAndCast(Query q) avant de retourner ou d'appeler un transaction.commit(). Cela peut être fait en appelant l'un des accesseurs sur un élément de l'ensemble des éléments. Cela veille prolongée forcer à initialiser l'ensemble des éléments plutôt que de retourner une liste proxy.

EDIT

 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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top