Spring的ORM(Hibernate)与Hibernate的区别

3
我在我的Java项目中使用了Hibernate,其中我还使用了Spring MVC。
我避免使用SPRING HIBERNATE,因为它似乎使我的代码非常紧密耦合。现在,即使我将应用程序移动到Struts,我的服务层也可以正常工作(因为我使用的是核心Hibernate,而不是Spring提供的Hibernate)。
我希望有经验的开发人员回答这个问题:
为什么要使用Spring Hibernate?我知道它提供了许多功能,但存在一些折衷,因为它确实使您的代码紧密耦合,您无法在任何其他地方重复使用服务,因为它们将基于Spring的Hibernate API工作。

3
Spring-hibernate不存在。Spring不提供任何Hibernate。Spring只允许声明式地使用Hibernate事务。但你实际使用的是真正的Hibernate,具有真正的Hibernate API。 - JB Nizet
1
不知道有Spring-Hibernate API。顺便说一下,如果你按照接口编程,就永远不会遇到可重用性的问题。 - dieter
@JBNizet,我指的是Spring ORM(我正在使用Hibernate)。 - Danyal Sandeelo
如果您对这个主题感兴趣,请查看http://projects.spring.io/spring-data-jpa/。 - sodik
3个回答

4
Spring有7个不同的模块,每个都是独立的,您可以使用其中任何一个或多个。
  • 核心容器
  • Spring上下文
  • Spring AOP
  • Spring DAO
  • Spring ORM
  • Spring Web模块
  • Spring MVC框架
如果您想了解ORM集成,它不会与您的服务层产生任何紧密耦合。您可以同时在服务层使用Strut MVC和Spring-ORM + Hibernate,没有紧密耦合。此外,Spring提供了事务管理,HibernateTemplate支持,您无需关心会话和事务管理以及易于集成和配置。

谢谢。我现在可以移动我的代码并在struts中重用,你确定已经写好的代码包含了所有的spring orm详细信息可以被重用吗? - Danyal Sandeelo
当然可以使用,MVC和服务层之间没有依赖关系,它们完全独立,这正是Spring的强大之处。 - Mitul Sanghani

1
根据我的经验,Spring-Hibernate 提供以下内容:
  • 一个模板以使其配置变得'容易'
  • 持久化引擎可以作为依赖项使用,因此您可以随时更改它,而无需修改模型类中的 JPA 注释
  • 它被认为在管理 XA 事务方面要更加高效

除此之外没有其他内容...


0

这是一个相当复杂的问题,我可以用另一个问题来回答:

使用Hibernate的原因是什么?我知道它提供了许多功能,但存在一个权衡,因为它会使您的代码紧密耦合,您无法在任何其他地方重复使用服务,因为它们将基于Hibernate API工作。

为什么不使用直接的JDBC和SQL?

更具生产力地说,选择框架总是需要权衡:与框架耦合。

因此,框架提供的功能是否值得付出权衡的代价。


即使我使用JDBC或者SQL...也不会让我的代码耦合度过高...我可以重复使用这些服务...但是当涉及到Spring Hibernate时,我将不得不修改很多代码才能重复使用我的服务。 - Danyal Sandeelo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接