hibernate对象加载失败

时间:2011-09-18 06:36:57

标签: java hibernate

我在我的项目中使用Java和Hibernate。我面临着一个非常特殊的问题。每当我加载一个实体时,选择不对数据库进行触发,相反,每当我对对象执行某些操作时就像得到一些值,那时它会触发一个叫做延迟加载的选择。但问题是我在HBM文件中没有说明lazy="true"。有时,加载成功,然后当我尝试对对象进行一些操作时,它会给出错误ProxyInitializationError Session is Closed

可以查看以下链接以获取代码库: - http://pastebin.com/yD9ZM3yH

但是如果在实际的方法中我放了System.out.println(information.getStudentName());那么代码就可以正常运行,因为在会话关闭之前会激活select。

此致

2 个答案:

答案 0 :(得分:3)

这是正常的行为。

当您使用session.load(Object.class, id)时,返回的对象是代理类。 请看看我的答案:

What does Hibernate's load() method do for non-existing IDs?

2)您收到此错误,因为一旦您收到代理,Hibernate会话就会关闭,代理启动会抛出此异常。

您可以在本技术文章中阅读更多相关信息和可能的解决方案。

http://community.jboss.org/wiki/OpenSessionInView

希望它有所帮助。

答案 1 :(得分:1)

session.load和session.get

之间存在差异

有关详细信息,请参阅此https://forum.hibernate.org/viewtopic.php?p=2387456

要注意的另一件事是你的交易边界。这就是添加

的原因
System.out.println(information.getStudentName());

的工作。它发生在会话结束之前,因此代理能够初始化该字段。

LAZY与EAGER加载效果何时以及如何加载相关实体(Collections或OneToOne),而不是如何加载实体上的简单属性。