【问题标题】:Struts2 Hibernate PLuginStruts2 休眠插件
【发布时间】:2012-10-03 04:39:26
【问题描述】:

我正在寻找一个与 struts2 配合使用的 hibernate 插件,它可以使用 hibernate (JPA) 查询数据并在 jsp 中显示它而不会违反诸如休眠会话关闭之类的情况。

我正在使用最新的 struts2,Hibernate (JPA)。

Hibernate 中使用 Spring DAO 还是 JPA 更好?我更喜欢JPA。

在最新的 struts2 和 Hibernate 中使用 Full HIbernate Plugin 是否可行?

请帮忙。

谢谢。

【问题讨论】:

  • 我将采用其他方法,例如创建一个层,比如说填充器,它将为 UI 层填充数据,而不是将连接发送到 UI 层
  • Spring AOP @Transactional 支持非常适合管理会话(以防止诸如 Hibernate 会话关闭之类的错误)。它可以与 Hibernate/JPA 一起使用。您可能想通过 Spring 文档 static.springsource.org/spring/docs/3.0.x/reference/… 阅读它或使用 Struts2 + Spring + Hibernate 搜索教程。不过,这不是插件解决方案。
  • 嗨 Jensen,你有任何使用 Spring @Transactional 和 Hibernate(JPA) 的教程吗?谢谢。

标签: hibernate session jpa struts2 struts2-s2hibernate


【解决方案1】:

为了完成这项任务,您不需要完整的休眠插件。您正在寻求实现 Open Session In View 模式。基本上,这个想法是实现一个 servlet 过滤器,它打开一个休眠会话,将控制权传递给过滤器链的其余部分,然后在执行完成后关闭过滤器。以这种方式,您的视图有一个开放的会话可供使用,并最终关闭。但是,需要指出的是,有些人认为这是一种反模式,因为它确实允许您的视图代码通过延迟加载等方式触发大量与数据库相关的操作。这绝对是要记住的事情。

网上有很多例子,通常缩写为 OSIV,这里有一个使用直接休眠的例子,它是我为开源的前雇主编写的。我认为它的原始版本是在 2007 年左右编写的,最近从 SVN 转移到了 GIT:

https://fisheye.5amsolutions.com/browse/5AMCOM/core/src/main/java/com/fiveamsolutions/commons/web/filter/OpenSessionInViewFilter.java?r=78fe9215dcbdea11ed54e7446bf19f779cb13770

包含此内容的开源库的主页在这里:

https://www.5amsolutions.com/how-we-do-it/5am-commons

如果您想使用完整的 JPA 解决方案,spring 确实在 View 过滤器中包含一个 Open Entity Manager:

http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/orm/jpa/support/OpenEntityManagerInViewFilter.html

由于我多年没有使用 Spring,所以我没有使用过那个特定的类,但 Spring 的东西通常效果很好。

关于该主题的最后一个链接是几年前的休眠文档: https://community.jboss.org/wiki/OpenSessionInView

【讨论】:

  • Struts 2 Spring JPA(Hibernate) 如果使用Spring OpenEntityManagerInViewFilter,那么需要使用JPATransactionManager而不是纯JPA。这个对吗?任何教程都教如何集成 OpenEntityManagerInViewFilter + JPATransactionManager 并注入到 Struts2 中。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多