Hibernate映射问题

时间:2011-01-31 15:49:08

标签: java hibernate

我有一些通过hibernate映射的对象。

A有一个B

B有很多C

我创建B,给它一个C列表,并将B设置为A.保存它,一切都在数据库中的正确位置。

当我检索B时,我可以调用b.getCs()并且Cs在那里。凉。

我的问题是,当我检索A时,B就在那里,但是当我调用a.b.getCs()时,我收到以下错误:

  

org.hibernate.LazyInitializationException    - 无法初始化代理 - 没有会话 - 10890

有谁知道为什么这不起作用?

3 个答案:

答案 0 :(得分:0)

更改映射以禁用B上的C延迟加载。当然,如果你试图同时检索大量的B,你将会受到性能影响。

答案 1 :(得分:0)

在你的mappping上禁用延迟加载,如果你使用xml进行映射,试试这个

<hibernate-mapping default-lazy="false">

但是在使用它时你需要考虑你的性能问题,因为这会使你的程序在查询结果上变得非常慢。

如果使用注释:

@ManyToOne(fetch=FetchType.LAZY)
public List<A> getAllA(){
   //this is your method to get all A's list
}

答案 2 :(得分:0)

您没有提及申请类型。如果是Web应用程序,请考虑在View中使用Open Session(https://community.jboss.org/wiki/OpenSessionInView)。这也可能有所帮助。