在视图中打开会话备用

时间:2011-08-10 17:26:52

标签: hibernate design-patterns orm lazy-loading

我们正在使用stuts2(mvc层),spring 3.x(DI,事务划分,其他相关内容)和Hibernate 3.x(持久性)开发Web应用程序。

与使用此类或类似平台的任何其他Web应用程序一样,当操作的主要逻辑已经完成时,必须处理案例,因此,Hibernate会话已经关闭且数据库事务已经结束,这是一个常见问题我们得到的异常时需要注意:LazyInitializationException:Session已经关闭。

解决这个问题有多种方法,其中一种被广泛接受的解决方案是 在视图中打开会话模式。 当我们使用弹簧时,我们可以很容易地利用弹簧开箱即用。

对于这种模式,还有其他好的替代方案,通过询问我不是在寻找替代解决方案,而是想进行比较研究,可以使用其他好的和同样有效的方法来解决这个问题。

提前致谢 Umesh制作

1 个答案:

答案 0 :(得分:1)

OSIV似乎总是引起人们的问题。这是一个对我有用的策略:

  1. 所有Hibernate关联都标记为LAZY
  2. DAO get方法都采用布尔loadChildren;如果是,则初始化get'ed实体的子关联
  3. 根据特定请求是否需要子关联,Controller将loadChildren作为T或F传递给服务和DAO层
  4. 视图层访问具有遍历关联所需的内容,而无需担心它们是否已初始化