Spring hibernate模板何时使用,为什么?

时间:2010-11-01 09:32:19

标签: java hibernate spring

问候, 目前正在开发小型Web服务应用程序,其中Web服务(使用CXF + Spring)的响应处理并保存到数据库。使用数据库我正在使用Hibernate(3.5)。在Web上浏览一些Hibernate + Spring示例,我经常可以看到HibernateTemplate的用法,所以我对这一刻感到有点困惑,并想问:

您在Hibernate3应用程序中使用HibernateTemplate吗? 什么时候HibernateTemplate可以让您的开发生活更美好,并且根据我可以决定的点,我是否需要使用它?

感谢。

5 个答案:

答案 0 :(得分:51)

所有Spring模板(hibernate,jdbc,rest,jpa等)都有相同的优点和缺点:

Pro:他们为您执行常见的设置例程,让您跳过样板并专注于您想要的逻辑。

Con:您将应用程序紧密耦合到spring框架。出于这个原因,Spring建议不再使用HibernateTemplate

具体来说,HibernateTemplate为您做的是在代码执行后自动打开和关闭会话以及提交或回滚事务。但是,所有这些都可以使用Spring Declarative Transaction Management以面向方面的方式实现。

<强>参考:


<强>更新

从Spring 3.1(及更新版本)开始,HibernateTemplate has been removed。有关当前建议的使用模式,请参阅Hibernate

答案 1 :(得分:11)

让我澄清一下,Spring的HibernateTemplate将不会得到支持,这意味着Hibernate 4+版本不支持HibernateTemplate。因此建议使用Sean建议的declarative transaction management

答案 2 :(得分:5)

HibernateTemplate为您提供了许多内容,让您的生活更轻松。

您可以选择是否使用它。就此而言,您可以在没有Hibernate的情况下使用数据库。 Spring的JDBC东西非常好。您可能会发现无需学习Hibernate就可以更轻松地完成问题。

答案 3 :(得分:1)

OpenSessionInViewFilter模式有效。这将打开一个Hibernate会话&amp;在处理每个请求期间将它绑定到您的线程。 OpenSessionInView还将Session和loadability扩展为View rendering&amp; View层,它减少了耦合和复杂性(通过使其“正常工作”)。

我的理念并不真正同意基于方面/声明的交易管理。我喜欢使主要的状态变化/生命周期事件“明确”,因为它们应该是绝对明确的 - 而不是弱依赖于多个隐藏和放大。间接层,可能有效也可能无效。

它提供了一个调试点。

TX提交只有一行代码;但它是你想断点的主要人物。不再是语法上的“交易”声明;但是更加确定了。

坦率地说,我找到了“用户命令”或“请求”,这是发起交易的正确位置。控制交易性,应该是结构良好,识别良好的&amp;在应用程序中相当明确。

(我确实无法让方面类加载工作,在第一次出现时尝试它。我的评估是,与编写良好的OO代码相比,方面只有有限的边际价值。)< / em>的

提示:我通常会创建一个帮助类,使非常方便获得Session&amp;提交交易。

HbHelper或其他一些人。

答案 4 :(得分:1)

所有模板将在未来弃用。最好使用JPA标准的实体管理器。