我正在使用带有Hibernate 3的Turbine 2.3.2。我的问题是当我的(Velocity 1.6.4)模板被执行时,Hibernate会话不活动,而我正在访问Hibernate需要延迟初始化的数据库中的数据。因此,我得到一个LazyInitializationException - 没有Session错误。
由于我希望在运行速度模板时我的Hibernate会话处于活动状态,因此我希望在Velocity模板之前和之后执行一个类。这样我就可以在一个地方打开和关闭我的Hibernate会话。 (在Hibernate中禁用延迟初始化对我来说不是一个选项)。是否有任何与Turbine相关的可能性来编写一种在Velocity模板执行之前和之后执行的侦听器或过滤器(我不知道如何调用它)?或者也许servlet容器可以过滤请求....你会推荐什么选项?
答案 0 :(得分:1)
尝试查看Spring OpenSessionInViewFilter。它打开Hibernate Session并将其分配给threadlocal。这样,您就可以在数据访问层中进行选择并使用它。
答案 1 :(得分:1)
在View中打开Session不是一个干净的解决方案。您可以在您的条件中配置(如果您使用它)Hibernate必须急切地获取哪些关联路径。 如果您使用HQL,只需在会话仍处于打开状态时“触摸”关联。
答案 2 :(得分:0)
您的问题似乎与(in)着名的Open Session In View(OSIV)模式有关。 看看JBoss wiki上的Open Session in View页面,你会发现一个基于过滤器的实现(非基于Spring)。