Spring Data JPA是JPA的实现吗?

23

我正试图真正了解 Spring Framework。我对 Spring Core(DI)和 Spring MVC 有一些基本的理解。

对于数据部分,我现在正在专注于 Spring Data JPA。据我所知,JPA 是一个标准规范,有多个实现,其中 Hibernate 是著名的实现之一。

现在,当我开始使用 Spring Data JPA 时,我认为 Spring Data JPA 是 JPA 规范的一个独立实现。但结果我错了。

如果我理解正确的话,Spring Data JPA 是 Spring 提供的一个抽象层,它内部使用其他 JPA 提供者(比如 Hibernate),所以通常是这样的:

应用程序 ---> Spring Data JPA --> Hiberate --> JDBC ----> 数据库

我的理解正确吗?如果是这样,Spring Data JPA 不是具有误导性吗?它本身并不是一个 JPA 提供者,而只是一个在其他 JPA 提供者 之上工作的抽象层。

我不确定我是否真正理解了 Spring Framework 还是这是一个非常复杂的框架?

有没有人可以帮助我理解它呢?


5
是的,这个名字具有误导性。是的,它不是 JPA 的提供者。是的,它只是一个抽象层。是的,人们经常在这里将问题标记为 JPA,但实际上他们想问的是 Spring Data JPA。还有许多其他 JPA 实现,它们都有自己的优点。 - Neil Stockton
1
看起来还不错,只是我觉得抽象级别有点高。Spring Data JPA - 参考文档 - K.Nicholas
感谢你的回复。我相信Spring实质上是使用了“现有框架”,而不是对规范进行实现。我的理解是否正确?这让我想知道为什么Spring作为一个简单地利用现有框架的工具,却成为了一个著名的框架。 - CuriousMind
1
@CuriousMind 这是因为Spring确实是一个框架(当人们说“Spring”时,大多数人指的是原始框架)。但与此同时,Spring已经成为一个由原始框架和许多其他框架、抽象等组成的整个生态系统,例如Spring Data。 - dunni
感谢您的评论。我认为理解这一点仍然是一个陡峭的学习曲线,对于新手来说并不简单。 - CuriousMind
1个回答

42

我认为这个项目的名称并没有错(免责声明:我是该项目的主管)。所有的Spring Data项目都会在它们的名称中列出它们所基于的存储或API。Spring Data JPA基本上就是针对JPA的Spring Data,就像Spring Data MongoDB是针对MongoDB的Spring Data,Spring Batch是用于批处理应用程序的Spring,Spring Integration是用于集成项目的Spring。

请修正您的JPA依赖关系图:

Application -> Spring Data JPA -> JPA <- Hibernate -> JDBC -> DataSource

-> — uses
<- — implements

对于 MongoDB,同样适用:

Application -> Spring Data MongoDB -> MongoDB Java driver -> MongoDB

等等,我很感兴趣您是从何处得到Spring Data JPA是JPA实现的印象,因为既不是项目页面也不是参考文档有任何说明。事实上,特别是项目页面非常明确地说明了该项目提供的功能。此外,研究一下总项目描述可能会有所帮助,它试图为其中包含的所有模块设置一些基本上下文。


4
非常感谢您精彩的解释,让我对事情有了更清晰的理解。之前我个人的理解是,“Spring Data JPA”可能是JPA的一种实现方式。但是,为了避免在错误的假设上建立知识,我决定提出这个问题,以澄清我的疑惑和理解。非常感谢! - CuriousMind
@OliverGierke,你好Oliver...你能帮我回答这个问题吗:https://stackoverflow.com/questions/50553782/spring-hibernate-transactional-is-not-working-in-spring-data-jpa-despite-being - securecurve
@OliverGierke .. 谢谢! - securecurve

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