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

时间:2013-03-27 20:59:35

标签: hibernate

我想将Hibernate对象添加到HTTP会话中。 HTTP会话参与群集环境并通过序列化进行复制的位置。序列化HTTP会话时,会抛出延迟加载异常,因为它超出了会话的范围。似乎应该有一种方法来指示hibernate不要尝试序列化一个没有延迟加载的对象。毕竟,这是对象图的状态,序列化转储对象图的状态。如果一个对象仅仅是一个代理,因为它尚未加载,那么只应该序列化代理。对?无论如何,这是我希望看到的行为。关于如何实现这一目标的任何想法?

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

1 个答案:

答案 0 :(得分:2)

在群集环境中,您可能希望仅在HTTP会话中存储objectIds。这样群集节点就可以在DB中查询真实节点。

另一种选择是将Hibernate对象从Hibernate Session中分离出来并对其进行序列化。 (在这种情况下,您可能需要初始化惰性字段)。为了初始化延迟加载的字段,您可能希望使用this

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

是的,不要将HTTP会话与Hibernate Session混合在一起。这些是完全不同的东西。