我对 Spring Data-JPA 和 JPA 之间的区别有点困惑。我知道 JPA,它是一种使用流行的 ORM 技术将 Java 对象持久保存到关系数据库的规范。
换句话说,JPA 提供接口和其他 ORM 技术,实现那些称为 JPA 提供程序(例如 Hibernate)的接口。
现在,Spring Data JPA 究竟是什么?
Spring Data JPA 是否在 JPA 之上添加了更多功能(接口)并且它仍然只是指定的或者它也是一个 JPA 提供者?
我看到 Spring Data JPA 围绕存储库工作(DAO 层:如果我没记错的话)。所以,我的意思是,使用“Spring Data JPA + Hibernate”或仅使用“Hibernate”指导有何不同?
原文由 Dhruv 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如您所说, JPA 是一种 _规范_,而 Hibernate 是该规范的特定实现(这些实现通常称为 Providers )。通过使用 Hibernate,您将自己绑定到该提供者,从而限制了您在需要时切换到另一个选项的自由(例如,您想改用 EclipseLink 或 ObjectDB,因为 Hibernate 有一个错误会停止您的开发过程)。
引用 Spring Data JPA 的 文档:
总而言之,它在 JPA 之上添加了另一层抽象,类似于定义基于标准的设计以支持 Spring 上下文中的 _持久层_。那些已定义的接口(Spring 已知)提供框架使用 JPA 处理的服务以提供结果。您以 Spring 可以扫描项目并找到它的方式定义存储库:
因此,允许您在容器的上下文中或容器外使用它。
Spring Data JPA 提供了一个定义,用于通过引用 JPA 规范、使用您定义的提供程序来实现底层支持的存储库。