1

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

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

4

1 回答 1

2

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

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

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

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

于 2013-03-27T21:04:55.670 回答