Spring Data JPA 是 JPA 实现吗?

Posted

技术标签:

【中文标题】Spring Data JPA 是 JPA 实现吗?【英文标题】:Is Spring Data JPA a JPA implementation? 【发布时间】:2016-08-23 13:58:27 【问题描述】:

我正在尝试“真正”理解 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),所以通常是这样的:

Application ---> Spring Data JPA --> Hiberate --> JDBC ----> DB

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

我不确定我是真的了解 Spring 框架还是完全是一个复杂的框架?

谁能帮我理解一下?

【问题讨论】:

是的,这是一个误导性的名称。是的,它不是 JPA 提供者。是的,它只是一个抽象层。是的,人们经常在此处将问题标记为 JPA,而他们的意思是 Spring Data JPA。还有很多其他的 JPA 实现都有自己的优势 似乎是对的,只是在我看来抽象级别非常高。 Spring Data JPA - Reference Documentation. 感谢您的回复。我相信本质上 Spring 使用“现有框架”,而不是它做任何规范实现?我对么?这让我想知道 Spring 是如何成为一个著名的框架,而它只是在底层使用现有的框架。 @CuriousMind 那是因为 Spring 是一个框架(大多数人在说“Spring”时指的是原始框架)。但与此同时,Spring 变成了一个完整的生态系统,由原始框架和许多其他框架、抽象等组成,例如 Spring Data。 感谢您的 cmets。我相信理解这一点仍然是一个陡峭的学习曲线,而且对于一个新来的人来说并不是那么简单。 【参考方案1】:

我不认为它命名错误(免责声明:我是项目负责人)。所有 Spring Data 项目都在其名称中列出了它们基于的商店或 API。 Spring Data JPA 基本上是 Spring Data for JPA,就像 Spring Data MongoDB 是 Spring Data for MongoDB,就像 Spring Batch 是 Spring for batch应用程序,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 的实现,因为project page 和reference documentation 都不是任何地方的状态。事实上,尤其是project page 非常明确地说明了项目提供的功能。此外,研究description of the umbrella project 可能会有所帮助,它试图为其中包含的所有模块设置一些基本上下文。

【讨论】:

非常感谢您的精彩解释,它清除了一切。我个人的解释是,当他们说“Spring Data JPA”时,它可能是 JPA 的实现。我没有牢记这种怀疑并在错误的假设事物上建立知识,而是决定提出这个问题以寻求澄清我的怀疑/理解。非常感谢! @OliverGierke,你好奥利弗……你能帮我回答这个问题吗:***.com/questions/50553782/… @OliverGierke .. 谢谢!

以上是关于Spring Data JPA 是 JPA 实现吗?的主要内容,如果未能解决你的问题,请参考以下文章

spring data jpa中实现JpaRepository接口的repository可以返回sortedset吗?

Spring data jpa删除元素时必须先查询出来吗

spring-data-jpa @Query 支持正则表达式语法吗?

spring-data-jpa软删除方案

Spring data jpa删除元素时必须先查询出来吗

spring data jpa怎么和solr整合