我看到了Spring,JPA可以绕过存储库(DAO层:如果我没有弄错的话).所以我的意思是,使用"Spring JPA+Hibernate"和直接使用"Hibernate"有什么不同?
正如您所说,JPA是specification,而Hibernate是该规范的特定实现(这些实现通常被称为Providers).通过使用Hibernate,您可以将自己绑定到该Provider ,从而限制了您在需要时切换到另一个选项的自由(例如,您希望使用EclipseLink或ObjectDB,因为Hibernate有一个错误,会中断您的开发过程).
引用100's份文件:
很长一段时间以来,实现应用程序的数据访问层一直很麻烦.必须编写太多的样板代码.领域类很贫乏,没有以真正的面向对象或领域驱动的方式进行设计.
使用这两种技术可以让开发人员在富域模型的持久性方面更加轻松.尽管如此,实现存储库的样板代码量仍然相当高,尤其是.因此,Spring数据的存储库抽象的目标是显著减少为各种持久性存储实现数据访问层的工作量.
总而言之,它是在JPA的基础上添加了另一层抽象,定义了一种基于标准的设计,在Spring环境中支持Persistence Layer.这些定义的接口(Spring已知)提供了框架使用JPA处理的服务,以服务于结果.您可以用Spring扫描项目并找到它的方式定义存储库:
<repositories base-package="com.acme.repositories" />
因此,允许您在容器上下文中或容器外部使用它.
那么春天到底是什么,JPA.是Spring,JPA在JPA上增加了更多的功能(接口),还是只指定了它,还是它也是JPAProvider ?
Spring Data JPA提供了一个定义,通过引用JPA规范,使用您定义的提供程序来实现后台支持的存储库.