求助hibernate :failed to lazily initialize a collect

sunboyqq23 2011-05-14 05:18:15
这是Bill.hbm.xml:
  <class name="entity.Bill" table="Bill">
<id name="id" column="oid">
<generator class="increment" />
</id>
<property name="tableNum" column="table_num" />
<property name="consumption" column="consumption" />
<property name="isFinished" column="is_finished" />
<property name="createDate" column="create_date" />

<set name="itemSet" cascade="all" lazy="false">
<key column="Bill_id" />
<one-to-many class="entity.Item" />
</set>
</class>

测试代码:
Dish dish1 = DishDAO.findDishByName("apple");
Bill bill = BillDAO.findBill("B");
Item item = ItemDAO.createItem(new Item(1,dish1));
bill.getItemSet().add(item);

BillDAO.findBill()
public static Bill findBill(String tableNum) throws Exception {

Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Bill bill;

Query query = session.createQuery("from Bill bill where bill.tableNum=:tableNum and bill.isFinished=false");
query.setParameter("tableNum", tableNum);
List list = query.list();
Iterator iter = list.iterator();

if(iter.hasNext()) {
bill = (Bill) iter.next();
}else {
tx.commit();
session.close();
throw new Exception("bill not found");
}

tx.commit();
session.close();

return bill;

}

我在网上查到是hibernate懒加载的问题,其中一种解决方法是把lazy设置成false,我这么做了,但是为什么还会发生相同的错误呢,我是在netbeans下运行
...全文
54 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
穆大叔 2011-05-14
  • 打赏
  • 举报
回复
使用spring提供的opensessioninviewfilter过滤器,在web.xml加上
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
hoseli007 2011-05-14
  • 打赏
  • 举报
回复
表结构是否设计正确?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧