Java 如何在Hibernate中使用即时实例化?
这是我的映射类。Java 如何在Hibernate中使用即时实例化?,java,hibernate,lazy-initialization,Java,Hibernate,Lazy Initialization,这是我的映射类。 我称之为实例化的代码是: <!-- Clasa Proiect--> <class catalog="tema3" name="com.tema3.tables.Proiect" table="proiect" lazy="false"> <id column="proiect_id" name="id"> <generator class="native"/> </id> &l
我称之为实例化的代码是:
<!-- 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>
会话会话=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query q=session.createQuery(“来自Proiect”);
List lists=HibernateUtil.listAndCast(q);
session.getTransaction().commit();
obj=列表;
这是listandCastMethod:
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query q = session.createQuery("from Proiect");
List<Proiect> lists = HibernateUtil.listAndCast(q);
session.getTransaction().commit();
obj = lists;
公共静态列表listAndCast(查询q){
@抑制警告(“未选中”)
List=q.List();
退货清单;
}
我不断地得到一个:
public static <T> List<T> listAndCast(Query q) {
@SuppressWarnings("unchecked")
List list = q.list();
return list;
}
2011年5月2日下午4:38:03 org.hibernate.LazyInitializationException
严重:未能延迟初始化角色集合:com.tema3.tables.Proiect.itemList,未关闭任何会话或会话
org.hibernate.LazyInitializationException:未能延迟初始化角色集合:com.tema3.tables.Proiect.itemList,未关闭任何会话或会话
位于org.hibernate.collection.AbstractPersistentCollection.ThrowlazyiInitializationException(AbstractPersistentCollection.java:358)
但问题是Proiect类的字段被填充,除了我得到这个异常的Items集合,但是我想填充Items集合。我该怎么做呢 在返回或调用
transaction.commit()之前,初始化listAndCast(Query q)
方法中的项集。这可以通过调用项集中某个元素的任何访问器来实现。这将强制hibernate初始化项目集,而不是返回代理列表
编辑
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)
会话会话=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query q=session.createQuery(“来自Proiect”);
List lists=HibernateUtil.listAndCast(q);
if(lists!=null&&lists.size()>0){
设置s=lists.get(0.getItemList();
迭代器iter=s.Iterator();
while(iter.hasNext()){
Item=iter.next();
item.getSomething();
打破
}
}
session.getTransaction().commit();
obj=列表;
我找到了答案。它需要将属性添加到XML中的集合声明中
lazy=“false”
ii很抱歉,你能说得更具体一点,也许写一点代码,因为我不知道你在说什么。嘿,thx,但是我发现了问题……我不得不在xml中的set声明中添加“lazy=“false”,结果成功了。用于更新面团的thk
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;