我看到Spring,JPA在存储库周围工作(DAO层:如果我没有错的话)。所以我的意思是使用“Spring JPA + Hibernate”或仅使用“Hibernate”有什么不同?
正如你所说,JPA是一个规范,而Hibernate是该规范的特定实现(这些实现通常被称为提供者)。通过使用Hibernate,您可以将自己绑定到该提供商,从而限制了您在需要时切换到另一个选项的自由(例如,您希望使用EclipseLink或ObjectDB,因为Hibernate有一个错误会停止您的开发过程)。
引用Spring Data JPA的文档:
实现应用程序的数据访问层已经很麻烦了很长一段时间。必须编写太多的样板代码。域类是贫乏的,并且没有以真正的面向对象或域驱动的方式设计。
使用这两种技术使开发人员在富域模型的持久性方面生活变得更加轻松。尽管如此,实现存储库的样板代码量仍然很高,特别是仍然很高。因此,Spring Data的存储库抽象的目标是大大减少为各种持久性存储实现数据访问层的工作量。
总而言之,它是在JPA之上添加另一层抽象,即定义一个基于标准的设计来支持Spring上下文中的持久性层。这些定义的接口(Spring已知)提供了框架使用JPA处理的服务来提供结果。您以Spring可以扫描项目并找到它的方式定义存储库:
<repositories base-package="com.acme.repositories" />
因此,允许您在容器的上下文中或容器外部使用它。
现在,春天到底是什么,JPA。Spring,JPA是否在JPA上添加了更多的功能(接口),并且仍然仅指定它还是它也是JPA提供程序?
Spring Data JPA 提供了一个定义,通过使用您定义的提供程序引用 JPA 规范来实现底层支持的存储库。