有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPA和Spring数据JPA之间有什么区别?

我对Spring数据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”有什么不同


共 (4) 个答案

  1. # 1 楼答案

    JPA

    JPA规范规范了Java对象映射到关系数据库系统的方式。作为一个规范,JPA由一组接口组成,比如EntityManagerFactoryEntityManager,以及帮助您将Java实体对象映射到数据库表的注释

    有几个JPA提供者,比如HIbernate、EclipseLink或Open JPA,您可以使用它们

    Spring数据JPA

    Spring数据JPA是一种JPA数据访问抽象。与JPA一样,没有JPA提供商,Spring Data JPA也无法工作

    Spring数据JPA为DDD ^{} pattern^{}提供了一个解决方案。它还可以通过方法名约定代表您生成JPA查询

    Spring Data JPA可以与Hibernate、Eclipse Link或任何其他JPA提供商一起使用。使用Spring或JavaEE的一个非常有趣的好处是,可以使用@Transactional注释以声明方式控制事务边界

  2. # 2 楼答案

    市场营销。春季生命周期遵循一种修辞模式,即Java项目X是邪恶的,然后意识到它是必要的,然后重新命名并声称是它的发明者

  3. # 3 楼答案

    The Java Persistence API, sometimes referred to as JPA, is a Java framework managing relational data in applications using the Java Platform, Standard Edition (JavaSE) and Java Platform, Enterprise Edition(JavaEE).

    本文中的持久性包括三个方面:

    • API本身,在javax.persistence包中定义

    • Java持久性查询语言(JPQL)

    • 对象关系元数据

      enter image description here

    Spring Data JPA is part of the umbrella Spring Data project that makes it easier to implement JPA based repositories.

    功能:

    • 基于Spring和JPA构建存储库的完善支持
    • 支持QueryDSL谓词,从而支持类型安全的JPA查询
    • 域类的透明审核
    • 分页支持、动态查询执行、集成自定义数据访问代码的能力
    • 启动时@Query带注释查询的验证
    • 支持基于XML的实体映射
    • 通过引入@EnableJpaRepositories

      enter image description here
  4. # 4 楼答案

    I saw Spring, JPA works around repositories (DAO layer: if I am not wrong). So I mean how it is different using 'Spring JPA + Hibernate' or only using 'Hibernate' directly?

    正如您所说,JPA是一个规范,而Hibernate是该规范的一个特定实现(这些实现通常被称为提供者)。通过使用Hibernate,您可以将自己绑定到该提供商,从而限制了您在需要时切换到另一个选项的自由(例如,您希望使用EclipseLink或ObjectDB,因为Hibernate有一个错误,会中断您的开发过程)

    引用Spring Data JPA的文档:

    Implementing a data access layer of an application has been cumbersome for quite a while. Too much boilerplate code had to be written. Domain classes were anemic and haven't been designed in a real object oriented or domain driven manner.

    Using both of these technologies makes developers life a lot easier regarding rich domain model's persistence. Nevertheless the amount of boilerplate code to implement repositories, especially is still quite high. So the goal of the repository abstraction of Spring Data is to reduce the effort to implement data access layers for various persistence stores significantly.

    总之,它是在JPA的基础上添加了另一层抽象,定义了一种基于标准的设计,以支持Spring环境中的持久层。这些定义的接口(Spring已知)提供了框架使用JPA处理的服务,以服务于结果。您可以用Spring扫描项目并找到它的方式定义存储库:

    <repositories base-package="com.acme.repositories" />
    

    因此,允许您在容器上下文中或容器外部使用它

    Now what exactly is Spring, JPA. Is Spring, JPA has added some more functionality (Interfaces) over JPA and still it is specified only or it is also a JPA provider?

    Spring Data JPA提供了一个定义,通过引用JPA规范,使用您定义的提供程序来实现后台支持的存储库