Java Hibernate映射问题

Java Hibernate映射问题,java,hibernate,Java,Hibernate,我通过hibernate映射了一些对象 A有一个B B有许多C 我创建了B,给它一个Cs列表,并在a中设置了B。保存它,所有东西都会放到数据库中正确的位置 当我检索B时,我可以调用B.getCs(),而Cs就在那里。酷 我的问题是,当我检索A时,B在那里,但是当我调用A.B.getCs()时,我得到以下错误: org.hibernate.LazyInitializationException -无法初始化代理-无会话-10890 有人知道这为什么不起作用吗?更改映射以禁用Bs上的C延迟加载。当然

我通过hibernate映射了一些对象

A有一个B

B有许多C

我创建了B,给它一个Cs列表,并在a中设置了B。保存它,所有东西都会放到数据库中正确的位置

当我检索B时,我可以调用B.getCs(),而Cs就在那里。酷

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

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


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

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

禁用映射上的延迟加载,如果您使用xml进行映射,请尝试以下操作

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

但是使用这个时,你需要考虑你的性能问题,因为这会使你的程序在一个大的查询结果上真的很慢。 如果使用注释:

@ManyToOne(fetch=FetchType.LAZY)
public List<A> getAllA(){
   //this is your method to get all A's list
}
@ManyToOne(fetch=FetchType.LAZY)
公共列表getAllA(){
//这是您获取所有A的列表的方法
}

您没有提到应用程序的类型。如果是Web应用程序,请考虑在视图中使用打开会话(https://community.jboss.org/wiki/OpenSessionInView). 这可能也有帮助。

惰性加载问题在Hibernate中非常常见。Stackoverflow充满了关于这方面的问题和答案,我建议使用上面的搜索字段…/你应该检查你的FetchType如果你提供更多信息,它可能会有用。如何以及在何处使用getCs()和getB()?什么类型?你在做什么手术?等