【问题标题】:Spring + hibernate versus Spring Data JPA: Are they different?Spring + hibernate 与 Spring Data JPA:它们有什么不同吗?
【发布时间】:2016-08-28 23:43:57
【问题描述】:

虽然不是新手,但我正在尝试学习 Spring 框架(再次!)以确保我真正理解这一点。我对核心 Spring (DI) 有很好的了解。现在,我专注于数据层。

我遇到过“Spring 和 Hibernate”这个词。正如我所理解的那样,这意味着使用带有 Hibernate 的 Spring Framework 作为 ORM 工具/JPA 提供程序。

现在我遇到了“Spring Data JPA”。我澄清了关于 Spring Data JPA 的 SO,它是 JPA 之上的一个抽象层(并且在 Spring Data JPA 的底层使用 Hibernate 或任何其他 JPA 提供程序)。

现在这些术语是一样的吗?即“Spring + hibernate”与“Spring Data JPA”是否相同。如果不是,那么有什么区别/相似之处?

我真的对这么多看似相似但可能不同的术语/陈述(如上)感到困惑。

【问题讨论】:

标签: spring hibernate jpa spring-data-jpa spring-orm


【解决方案1】:

正如您所说,Spring-data-jpa 提供的不仅仅是经典的 Spring-JPA 集成。通过 JPA/Hibernate 集成,您主要获得

  • 使用 JPA/Hibernate 事务的声明式事务管理
  • 异常翻译
  • JPA EntityManager 或 Hibernate SessionFactory 作为可注入 bean

使用 Spring-data-jpa,您可以获得所有这些,以及(除其他外)

  • 仅接口存储库,使用方法名称自动推断查询
  • @Query 注解定义接口方法应该返回的查询
  • 可分页查询的自动处理
  • 标准 crud 存储库的基类

这只是一个小小的介绍。如需更多帮助,请阅读文档。

【讨论】:

  • 非常感谢您的回复。因此,当我们看到“Spring + Hibernate”时,它意味着 Spring 直接使用 Hibernate,而当我们看到“Spring Data JPA”时,它意味着使用 Spring Data jpa 抽象,jpa 提供者可以是任何东西(如 Hibernate、eclipselink 等)和 Spring 数据jpa 可以提供更多服务,您在回复中已经提到了其中的一些。
  • 是的。但是您也可以将 Spring 与任何 JPA 提供程序一起使用,而无需使用 Spring-data-jpa。
  • 非常感谢您澄清这个疑问。非常感谢您的时间。
【解决方案2】:

当你谈到 spring + hibernate 时

  1. 如果您单独阅读 hibernate,您会理解它使用映射(基本上是配置 pojo 与数据库关系的映射)和配置(特定于数据库的配置,如驱动程序类、url、用户名、密码、方言等)。
  2. 所以现在如果你想使用读、写、更新等,你必须得到hibernatesessionfactory,打开事务并提交。每个操作都有大量的前期和后期工作。
  3. 当您将hibernate与spring集成时,spring使用此配置并将其保存在应用程序上下文中,并提供包装器hibernatetemplate,内部使用hibernatesessionfactory。所以你在做这些操作的时候不需要太关心前后代码。
  4. 它还提供缓存(一级和二级缓存)以提高性能。
  5. 还可以让您使用独立于数据库的 HQL。它使用数据库方言生成特定于数据库的 sql。

现在让我们谈谈 spring + data jpa

  1. 它带有基础存储库接口(来自 spring data common, spring jpa)
  2. 所以假设您有兴趣进行 crud 操作,只需扩展 crud repository,spring 将在运行时注入其实现。
  3. 假设您想为您的应用程序定义通用方法,您可以通过创建扩展Repository 接口的新存储库接口来实现。并且可以在整个应用程序中使用它。
  4. 它还提供查询方法,允许您使用本机sql or jpql.

【讨论】:

    【解决方案3】:

    我觉得this link 很有帮助:

    JPA 是 Java Persistence API,它是 Java 用于对象关系映射的标准 API。

    JPA 只是一个规范 - 您需要实现它才能使用它。 Hibernate 是 JPA 最著名和最常用的实现之一,但还有其他实现,例如 EclipseLink JPA。

    Spring Framework 是一个大型框架,可帮助您更轻松地编写企业级软件。它包含对许多 Java 技术的支持,包括 JPA。

    Spring 框架由一系列项目组成,其中一个项目是 Spring Data。

    Spring Data 的目标是更轻松地使用不同类型的数据库,从传统的关系数据库到 NoSQL 数据库。 Spring Data 通过 Spring Data JPA 子项目支持 JPA。

    要编写使用 JPA 的程序,您至少需要一个 JPA 实现,例如 Hibernate。

    如果您将 Spring 框架用于您的应用程序,您很可能希望将 Spring Data JPA 与 Hibernate 一起使用。

    【讨论】:

      【解决方案4】:

      Spring Data JPA 不是 JPA 提供者。它是一个库/框架,在我们的 JPA 提供程序(如 Hibernate)之上添加了额外的抽象层。

      因此,如果没有 Hibernate、EclipseLink 等 JPA 提供程序,您将无法使用 Spring Data。

      【讨论】:

        猜你喜欢
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        • 2019-07-20
        • 2016-06-26
        • 2016-10-15
        • 1970-01-01
        相关资源
        最近更新 更多