序列化Hibernate对象时避免延迟加载异常

序列化Hibernate对象时避免延迟加载异常,hibernate,Hibernate,我想将Hibernate对象添加到HTTP会话中。其中HTTP会话参与群集环境,并通过序列化进行复制。序列化HTTP会话时,会引发延迟加载异常,因为它不在会话范围内。似乎应该有一种方法来指示hibernate不要尝试序列化尚未延迟加载的对象。毕竟,这就是对象图的状态,序列化转储对象图的状态。如果一个对象仅仅是一个代理,因为它没有被加载,那么只有代理应该被序列化。对吗?不管怎样,这就是我希望看到的行为。关于如何实现这一点有什么想法吗 当然,我们的期望是序列化对象可以在另一台服务器上反序列化,并且会

我想将Hibernate对象添加到HTTP会话中。其中HTTP会话参与群集环境,并通过序列化进行复制。序列化HTTP会话时,会引发延迟加载异常,因为它不在会话范围内。似乎应该有一种方法来指示hibernate不要尝试序列化尚未延迟加载的对象。毕竟,这就是对象图的状态,序列化转储对象图的状态。如果一个对象仅仅是一个代理,因为它没有被加载,那么只有代理应该被序列化。对吗?不管怎样,这就是我希望看到的行为。关于如何实现这一点有什么想法吗


当然,我们的期望是序列化对象可以在另一台服务器上反序列化,并且会话将得到适当的处理。

在集群环境中,您可能只希望在HTTP会话中存储objectid。这样集群节点就能够查询数据库中的真实节点

另一个选项是从Hibernate会话中分离Hibernate对象并对其进行序列化。(在这种情况下,您可能需要初始化惰性字段)。为了初始化惰性加载的字段,您可能需要使用

通常,如果在服务器之间传递对象,则必须初始化所有延迟加载的字段,否则序列化时会出现异常,因为无法序列化/反序列化hibernate会话


是的,不要将HTTP会话与Hibernate会话混合使用。这是完全不同的事情。

Funtik,感谢您的回复!这涉及到将Hibernate对象放入HTTP会话的遗留应用程序。在将其部署到集群环境并使用序列化来复制状态之前,这种方法一直运行良好。重构以仅存储对象ID将是一项艰巨的任务。我希望找到一种解决方案,Hibernate可以避免序列化未加载的对象。另一个很好的建议是,在将对象添加到HTTP sessionFunti之前,尝试将对象从Hibernate会话中分离出来,但遗憾的是,在我的情况下,这是可行的。应用程序使用Tapestry,它将某些类属性添加到会话中。因此,我无法看到将Hibernate对象添加到会话的位置。