0

我正在将 Turbine 2.3.2 与 Hibernate 3 一起使用。我的问题是当我的(Velocity 1.6.4)模板执行时,Hibernate 会话不活动,并且我正在访问 Hibernate 需要延迟初始化的数据库中的数据。因此我得到一个 LazyInitializationException - 没有会话错误。

因为我希望我的 Hibernate 会话在速度模板执行时仍然存在,所以我希望在 Velocity 模板之后和之前执行一个类。这样我就可以在一个地方打开和关闭我的 Hibernate 会话。(在 Hibernate 中禁用延迟初始化对我来说不是一个选项)。是否有任何与 Turbine 相关的可能性来编写一种侦听器或过滤器(我不确定如何调用它)在 Velocity 模板执行之前和之后执行?或者也许 servlet 容器可以过滤请求……你会推荐什么选项?

4

3 回答 3

1

尝试查看 Spring OpenSessionInViewFilter。它打开 Hibernate Session 并将其分配给 threadlocal。这样,您可以在数据访问层中获取并使用它。

于 2010-09-02T11:55:29.313 回答
1

在视图中打开会话不是一个干净的解决方案。您可以在您的标准中配置(如果您使用它)Hibernate 必须急切地获取哪些关联路径。如果您使用 HQL,只需在会话仍处于打开状态时“触摸”关联。

于 2010-09-02T13:46:02.837 回答
0

您的问题似乎与(不)著名的 Open Session In View (OSIV) 模式有关。查看 JBoss wiki 上的Open Session in View页面,您会发现一个基于过滤器的实现(非基于 Spring)。

于 2010-09-02T13:42:47.857 回答