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

JPA和Spring Data JPA有什么区别?

况喜
2023-03-14

我对Spring Data-JPA和JPA之间的区别有点困惑。我知道JPA是一种使用流行的ORM技术将Java对象持久化到关系数据库的规范。

Spring Data JPA是在JPA之上添加了一些更多的功能(接口),还是只指定它还是一个JPA提供程序?

我看到Spring Data JPA围绕存储库工作(DAO层:如果我没有错的话)。那么,我的意思是,使用“Spring Data JPA+Hibernate”和仅使用“Hibernate”指导有何不同?

共有1个答案

太叔航
2023-03-14

我看到Spring,JPA围绕存储库工作(DAO层:如果我没有错的话)。所以我的意思是使用'Spring JPA+Hibernate'和只直接使用'Hibernate'有什么不同?

正如您所说的,JPA是一个规范,而Hibernate是该规范的一个特定实现(这些实现通常被称为提供者)。通过使用Hibernate,您将自己绑定到了该提供者,从而限制了您在需要时切换到另一个选项的自由(例如,您希望使用EclipseLink或ObjectDB,因为Hibernate有一个中断开发过程的bug)。

引用Spring Data JPA的文档:

实现应用程序的数据访问层已经很长一段时间了。必须编写太多的样板代码。领域类是贫乏的,没有以真正的面向对象或领域驱动的方式设计。

使用这两种技术使开发人员在富域模型的持久性方面变得更加容易。然而,用于实现存储库的样板代码的数量仍然相当高。因此,Spring数据的存储库抽象的目标是大大减少为各种持久性存储实现数据访问层的工作量。

总而言之,它是在JPA的基础上添加了另一个抽象层,它定义了一个基于标准的设计,以支持Spring上下文中的持久层。这些定义的接口(Spring已知)提供框架使用JPA处理的服务,以服务结果。您以Spring可以扫描项目并找到它的方式定义一个存储库:

<repositories base-package="com.acme.repositories" />

现在,什么是Spring,JPA。是Spring,JPA在JPA上增加了一些更多的功能(接口),但它仍然只是指定的,还是一个JPA提供程序?

Spring Data JPA提供了一个定义,通过引用JPA规范,使用您定义的提供程序,来实现底层支持的存储库。

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

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

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

  • 问题内容: 之间有什么区别 和 此示例来自Java EE教程,但我仍然不了解详细信息。 问题答案: 从这里: 级联删除 用CascadeType.REMOVE(或CascadeType.ALL,包括REMOVE)标记引用字段表示删除操作应自动级联到该字段引用的实体对象(多个实体对象可以被collection字段引用): 移除孤儿 JPA 2支持附加的,更积极的删除级联模式,可以使用@OneToOn

  • Hibernate和Spring数据JPA之间的主要区别是什么? 我们什么时候不应该使用Hibernate或Spring数据JPA? 此外,何时SpringJDBC模板可以比Hibernate和SpringDataJPA性能更好?

  • 问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。