问候, 目前正在开发小型Web服务应用程序,其中Web服务(使用CXF + Spring)的响应处理并保存到数据库。使用数据库我正在使用Hibernate(3.5)。在Web上浏览一些Hibernate + Spring示例,我经常可以看到HibernateTemplate的用法,所以我对这一刻感到有点困惑,并想问:
您在Hibernate3应用程序中使用HibernateTemplate吗? 什么时候HibernateTemplate可以让您的开发生活更美好,并且根据我可以决定的点,我是否需要使用它?
感谢。
答案 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标准的实体管理器。