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