Pregunta

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

Esa es mi clase de mapeo.
El código en lo que llamo una instanciación es:

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

Y este es ListandcastMethod:

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

Y sigo obteniendo un:

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)

Pero la cuestión es que los campos de la clase proiecta están poblados, excepto los elementos establecidos donde obtengo esta excepción, pero quiero que los elementos estén llenos. ¿Cómo puedo hacerlo?

¿Fue útil?

Solución 2

Encontré la respuesta. Debe agregar a la declaración establecida en el XML de la propiedad lazy="false"

Otros consejos

Inicializar el conjunto de elementos dentro del listAndCast(Query q) método antes de regresar o llamar a un transaction.commit(). Esto se puede hacer llamando a cualquiera de los accesorios en un elemento desde el conjunto de elementos. Esto obligará a Hibernate a inicializar el conjunto de elementos en lugar de devolver una lista de poder.

EDITAR

 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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top