Spring Data JPA 和 Hibernate

Posted

技术标签:

【中文标题】Spring Data JPA 和 Hibernate【英文标题】:Spring Data JPA and Hibernate 【发布时间】:2019-07-20 21:01:54 【问题描述】:

Spring Data JPA 不是 JPA 实现,它是对数据库数据访问的抽象。 在与 JPA 的实现(比如 Hibernate)进行比较的领域中,我无法理解这个表达。使用 Spring Data JPA 时,要使用 CRUD 操作,您必须从 CrudRepository 接口扩展。但是没有 Hibernate,Spring Data JPA 不能独立工作,因为它不能将 java 对象转换为实体。但! Hibernate 还可以执行 CRUD 操作。所以问题是: 1。如果我们仍然需要使用 HIBERNATE,为什么开发人员使用 Spring Data JPA(精确的 CRUD 操作)? 2. CrudRepository 接口只是一个接口,它是从“Repository”接口扩展而来的。我们在 CRUD 类中对其进行扩展以实现 CRUD 操作。我不明白它是如何工作的。我们的类如何能够简单地通过扩展接口来执行 CRUD 操作。没有实现的方法。 我现在该如何回答这些问题:

    是为了简化代码。由于通过 Hibernate 使用 CRUD 操作需要更多代码。 目前,脑海中只有一些想法,即以某种(“神奇”)方式,CrudRepository 接口使用标准 Hibernate 工具来使用 CRUD 操作。

【问题讨论】:

Spring Data JPA 不是 JPA 的实现,实际上 Hibernate 是它的实现。 Spring Data JPA 有点像 java JPA 的包装器 【参考方案1】:

JPA 是一种规范,它指定了一组标准的类、方法、注释、约定等,用于将 Java 对象映射到关系数据库。

Hibernate 是本规范的实现之一。它实现了 JPA 规范中定义的所有内容。

Spring Data JPA 是一个使用 JPA 的框架,因此需要 JPA(Hibernate 或任何其他)的实现才能使用。它是建立在标准 JPA 规范之上的抽象层。

如果我们仍然需要使用 HIBERNATE,为什么开发人员使用 Spring Data JPA(准确地说是 CRUD 操作)?

因为 Spring-Data-JPA 使得在 Spring 应用程序中使用 JPA 变得容易,并且更容易定义存储库:所有基本操作,如果您不使用 Spring,通常必须手动编写 -框架已经为您实现了 Data-JPA。它基于约定和声明性查询,为您实现方法,这让事情变得更快、更安全、编写起来也更简单。

我不明白它是如何工作的。我们的类如何简单地通过扩展接口来执行 CRUD 操作

它使用动态代理:在运行时,它使用反射来检查存储库接口中定义的所有附加方法,并创建一个动态代理,即实现该接口并使用标准 JPA API 来实现定义的方法的类在界面中。这是一个比较高级的话题。谷歌“Java 动态代理”让您入门。但是您也可以只使用框架而不自己编写,就像您使用计算机而不了解电子设备的工作原理一样。

【讨论】:

简单地说:JPA类似于Servlet(都是J2EE的规范),Hybernate类似于Tomcat(分别是JPA和Servlet的实现),Spring Data Jpa类似于Spring(都是是 J2EE 的框架,分别是 Jpa 和 Servlet)。我说的对吗?

以上是关于Spring Data JPA 和 Hibernate的主要内容,如果未能解决你的问题,请参考以下文章

spring data jpa怎么和solr整合

spring data jpa详解

spring data jpa 详解

spring data jpa问题

Spring Data JPA 整合Spring

当加载 spring-boot 和 spring-data-jpa 时,Hibernate 无法加载 JPA 2.1 Converter