Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring hibernate模板何时使用以及为什么使用?_Java_Hibernate_Spring - Fatal编程技术网

Java Spring hibernate模板何时使用以及为什么使用?

Java Spring hibernate模板何时使用以及为什么使用?,java,hibernate,spring,Java,Hibernate,Spring,您好, 目前正在开发小型web服务应用程序,其中来自web服务的响应(使用CXF+Spring)经过处理并保存到数据库中。为了使用数据库,我正在使用Hibernate(3.5)。浏览web上的一些Hibernate+Spring示例,我经常可以看到HibernateTemplate的用法,所以我对这一时刻有点困惑,想问: 您是否在Hibernate3应用程序中使用HibernateTemplate? 什么时候HibernateTemplate可以让您的开发生活变得更好?我可以根据什么点来决定是否

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

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


谢谢

HibernateTemplate为您封装了许多东西,使您的生活更轻松

使用与否取决于你的选择。因此,您可以在不使用Hibernate的情况下使用数据库。Spring的JDBC非常好。您可能会发现,不必学习Hibernate就可以轻松解决问题。

所有spring模板(Hibernate、jdbc、rest、jpa等)都有相同的优点和缺点:

Pro:它们为您执行常见的设置例程,让您跳过样板文件,专注于所需的逻辑

缺点:您将应用程序与spring框架紧密耦合。因此,Spring建议不再使用
HibernateTemplate

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

参考资料:

  • Spring参考:用于当前建议的Spring Hibernate使用模式
  • 弹簧参考:

更新:


从Spring3.1(及更新版本)开始。请参阅以了解当前建议的使用模式。

让我澄清一件事,Spring的HibernateTemplate今后将不受支持,这意味着Hibernate 4+版本不支持HibernateTemplate。因此,建议按照Sean的建议使用OpenSessionInViewFilter模式。

OpenSessionInViewFilter模式是有效的。这将打开一个Hibernate会话,并在处理每个请求期间将其绑定到线程。OpenSessionInView还将会话和加载能力扩展到视图渲染和视图层,从而降低耦合和复杂性(通过使其“正常工作”)

我的理念与基于方面/声明性事务管理并不完全一致。我喜欢使主要的状态更改/生命周期事件“显式”,因为它们应该是绝对确定的——不弱地依赖于多个隐藏层和间接层,这可能有效,也可能无效

它提供了一个调试点

TX commit只是一行代码;但这是你想要突破的主要问题。不再是语法上的“事务性”声明;但更确切的是

坦率地说,我发现“用户命令”或“请求”是启动事务和控制事务性的合适位置,应该在应用程序中结构良好、标识良好且相当明确

(我确实很难让aspect类加载的东西正常工作,在它第一次出现时就尝试过。我的评估是,与编写良好的OO代码相比,aspect的边际价值有限。)

提示:我通常创建一个helper类,以方便获取会话和提交事务。


HbHelper或类似的东西。

所有模板都将被弃用。最好使用实体管理器,这是JPA的标准

感谢您提供的链接和提到HibernateTemplate现在不是推荐的方式,我想我将采用声明式事务方式;它已被完全消除。请参见Alef Arendsen在Spring官方博客上发表的《无模板》一文【Spring试图做到无创,这是另一个很好的例子!】正确的url:@ArunRaaj这是不可能回答的。所有的,真的。如果您使用的是Spring,那么它是许多持久性技术的常用方法。我从那里开始。从中长期来看,使用Hibernate更聪明、更高效。按照上述答案前进是危险的。我建议学习和使用Hibernate。危险吗?荒唐的我觉得上面的评论很好笑。我建议使用合适的工具来完成这项工作。很多项目已经开始“仅仅使用JDBC,因为它更简单”。但是应该从Hibernate开始,因为2周后它会更有效率。使用适合这项工作的正确工具-&根据提示,正确的工具是什么。我的经验不是这样。Hibernate是为那些不能编写像样的SQL的人设计的。托马斯,你会注意到这个问题已经有两年多了。你为什么要这么拼命地骑着冬眠嗜好马?@duffymo,“不弱地依赖于airy fairy魔法层,这可能有效,也可能无效”,请告诉我你什么时候可以在你的提交上设置断点。你也可以告诉孩子们你是如何开始调试的。。当事情不完美的时候。也许您还想解释一下声明性语法是如何比编写
HbHelper.commit()'
更“短”的。别误会,可能有支持这种技术的论点。但是,我喜欢权衡实际的利弊。而显式代码则更可靠、更易于调试。你要是不这么想就太傻了。不是真的。我不是傻瓜,我也不使用Hibernate。你能礼貌一点,不要在没有讨论任何事情的情况下进行一年前的讨论吗?谢谢。顺便说一句,当你阅读达菲推荐的HibernateTemplate时,你会看到这个。它甚至不再被支持了。任何读过这篇文章的人都应该注意,它是在我的ori之后两年出现的