Как я могу использовать нетерпеливую экземпляр в Hibernate?

StackOverflow https://stackoverflow.com/questions/5857949

Вопрос

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

Это мой класс картирования.
Код в том, что я называю экземпляром:

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

И это Listandcastmethod:

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

И я продолжаю получать:

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)

Но дело в том, что поля класса Proiect заполнены, за исключением того, что элементы, где я получаю это исключение, но я хочу, чтобы элементы были заполнены. Как я могу это сделать?

Это было полезно?

Решение 2

Я нашел ответ. Он должен добавить к установочному объявлению в XML свойство lazy="false"

Другие советы

Инициализировать набор элементов внутри listAndCast(Query q) метод перед возвращением или вызовом transaction.commit(). Анкет Это может быть сделано, позвонив по любому из аксессов на элементе из набора элементов. Это заставит Hibernate инициализировать набор элементов, а не возвращать список прокси.

РЕДАКТИРОВАТЬ

 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top