当前位置: 首页 > 知识库问答 >
问题:

Hibernate和Spring数据JPA有什么区别

阳福
2023-03-14

Hibernate和Spring数据JPA之间的主要区别是什么?

我们什么时候不应该使用Hibernate或Spring数据JPA?

此外,何时SpringJDBC模板可以比Hibernate和SpringDataJPA性能更好?

共有3个答案

澹台啸
2023-03-14

我不同意SpringJPA让生活变得容易。是的,它提供了一些类,您可以使一些简单的DAO变得更快,但实际上,这是您所能做的全部。如果你想做的不仅仅是findById()或save,你必须经历地狱:

  • org.springframework.data中没有EntityManager访问权限。存储库类(这是基本的JPA类!)
  • 自己的事务管理(不允许Hibernate事务
  • 多个数据源配置的巨大问题
  • 无数据源池(HikariCP必须用作第三方库)

为什么自己的事务管理是一个劣势?由于Java 1.8允许默认方法进入接口,基于Spring注释的事务,simple不起作用。

不幸的是,SpringJPA基于反射,有时需要将方法名或实体包指向注释(!)。这就是为什么任何重构都会导致大崩溃。遗憾的是,@Transactional仅适用于主DS:(因此,如果您有多个数据源,请记住-事务仅适用于主要数据源:)

Hibernate和Spring数据JPA之间的主要区别是什么?

Hibernate兼容JPA,Spring兼容JPA。您的HibernateJPA DAO可以与JavaEE或Hibernate Standalone一起使用,例如SpringJPA可以在Spring - SpringBoot中使用

什么时候不应该使用Hibernate或者Spring Data JPA?还有,Spring JDBC模板什么时候可能比Hibernate / Spring Data JPA表现更好?

仅当您需要使用大量连接或需要使用具有多个数据源连接的Spring时,才使用Spring JDBC。通常,避免JPA for Joins。

但我的一般建议是,使用新的解决方案——Daobab(http://www.daobab.io)。Daobab是我的Java和任何JPA引擎集成商,我相信它会对你的任务有很大帮助:)

东方乐
2023-03-14

我们在这里使用3种不同的东西:

  1. JPA :Java持久性API,它提供了从java对象到数据库中关系的持久化,读取,管理数据的规范。
  2. Hibernate:有各种实现jpa的提供程序。冬眠就是其中之一。所以我们还有其他提供商。但是,如果将jpa与Spring一起使用,则可以在将来切换到不同的提供商。
  3. Spring数据JPA :这是JPA之上的另一层,Spring提供使您的生活轻松。

因此,让我们了解Spring data jpa和Spring hibernate是如何工作的-

假设您的应用程序使用spring hibernate。现在,您需要有dao接口和实现,您将在其中使用hibernate的SessionFactory编写crud操作。假设您正在为Employee类编写dao类,明天在您的应用程序中,您可能需要为任何其他实体编写类似的crud操作。所以我们在这里可以看到很多样板代码。

现在,Spring数据jpa允许我们通过扩展其存储库(crudrepository、jparepository)来定义dao接口,因此它在运行时为您提供了dao实现。您不再需要编写dao实现。这就是Spring数据jpa让你的生活变得轻松的原因。

滕令雪
2023-03-14

Hibernate是 JPA 的实现,而Spring数据 JPA 是 JPA 的数据访问抽象。Spring数据 JPA 在没有 JPA 提供程序的情况下无法工作。

Spring Data为DDDRepository模式或遗留Generic道自定义实现提供了解决方案。它还可以通过方法名称约定代表您生成JPA查询。

对于Spring Data,您可以使用Hibernate、Eclipse Link或任何其他JPA提供程序。使用Spring或JavaEE的一个非常有趣的好处是,您可以使用@Transactional注释以声明方式控制事务边界。

SpringJDBC更轻量级,它用于本机查询,如果您只打算单独使用JDBC,那么最好使用SpringJDBC来处理JDBC冗余。

因此,Hibernate和Spring数据是互补的,而不是竞争对手。

 类似资料:
  • 问题内容: Hibernate和Spring Data JPA之间的主要区别是什么?什么时候不应该使用Hibernate或Spring Data JPA?另外,Spring JDBC模板何时可以比Hibernate / Spring Data JPA更好地执行? 问题答案: Hibernate是一个JPA实现,而Spring Data JPA是一个JPA数据访问抽象。没有JPA提供程序,Sprin

  • 问题内容: 我知道JPA 2是一个规范,而Hibernate是ORM的工具。另外,我了解到Hibernate具有比JPA 2更多的功能。但是从实际的角度来看,真正的区别是什么? 我有使用iBatis的经验,现在我想学习Hibernate或JPA2。我拿起Pro JPA2书籍,并且一直指“ JPA提供者”。例如: 如果您认为某个功能应该被标准化,则应该大声疾呼并向您的JPA提供者提出要求 这使我感到

  • 问题内容: 我对Spring Data-JPA和JPA之间的区别感到困惑。我了解JPA,它是使用流行的ORM技术将Java对象持久化到关系数据库的规范。 换句话说,JPA提供接口和其他ORM技术,实现那些称为JPA提供程序的接口,例如Hibernate。 现在,Spring Data JPA到底是什么? Spring Data JPA是否在JPA之上添加了更多功能(接口),并且仍然仅被指定还是JP

  • 我对Spring Data-JPA和JPA之间的区别有点困惑。我知道JPA是一种使用流行的ORM技术将Java对象持久化到关系数据库的规范。 Spring Data JPA是在JPA之上添加了一些更多的功能(接口),还是只指定它还是一个JPA提供程序? 我看到Spring Data JPA围绕存储库工作(DAO层:如果我没有错的话)。那么,我的意思是,使用“Spring Data JPA+Hibe

  • 我想知道Spring boot JPA是如何使用hibernate的,Spring boot JPA和hibernate之间有什么关系吗?当我们使用boot jpa时,我们只是实现了org.springframework.data.jpa.repository.jparepository接口,可以使用与列名匹配的函数名编写查询,也可以编写自定义查询,那么hibernate在这里的角色是什么?我们怎

  • 我需要编写一个应用程序,用它我可以使用spring数据和MongoDB进行复杂的查询。我开始使用MongoRepository,但在复杂的查询中很难找到示例或真正理解语法。 我说的是这样的问题: 或者使用基于JSON的查询,因为语法不对,所以我试了一遍又一遍。即使在阅读了mongodb文档之后(由于语法错误,不工作的示例)。 在通读了所有文档之后,似乎的文档要比好得多。我指的是以下文档: http