【问题标题】:what is the difference between spring data save and hibernate save?spring数据保存和休眠保存有什么区别?
【发布时间】:2017-06-07 06:02:44
【问题描述】:

spring数据save和hibernatesave有什么区别?它们的工作方式相同吗?

【问题讨论】:

    标签: spring hibernate spring-data-jpa


    【解决方案1】:

    如果您确切了解 JPA、Hibernate 和 Spring Data JPA 之间的关系,您会更好地理解这一点。

    JPA (Java Persistence API) 是用于在 Java 中执行 ORM (object-relational mapping) 的标准接口规范。请注意,它本身并不实现接口。您需要一个实现 JPA 规范的库才能在您的软件中使用它。

    Hibernate 是 JPA 的实现——它是一个实现 JPA 规范的库。

    Spring Data JPA 是 Spring Framework 的一个子项目,它可以更轻松地使用 JPA 并将其集成到 Spring Framework 的其余部分中。

    如果你使用 Spring Data JPA,你的项目中还需要有 JPA 的实现,比如 Hibernate。

    您使用 Spring Data JPA 提供的接口和类,它与底层 JPA 实现 (Hibernate) 对话以实际与数据库对话。

    通过Spring Data JPA保存实体最终会调用Hibernate来保存实体,所以最终效果是一样的。

    但是:如果您使用的是 Spring Data JPA,则不应直接使用 Hibernate。实际上,您自己的代码中根本不应该有任何对 Hibernate 的直接引用。通过在您的代码中直接使用 Hibernate,您将完全绕过 Spring Data JPA。

    【讨论】:

      【解决方案2】:

      Hibernate 的Session.save() 是JPA 中不存在的专有Hibernate 操作。它基本上和EntityManager.persist()做同样的事情,除了它保证生成ID并返回它。但是没有应用相同的级联,因为 Hibernate 有一个专有的 SAVE 级联选项,当然 JPA 中确实存在该选项。

      Spring-data-jpa 的 SimpleJpaRepository 的保存操作要么调用 EntityManager.persist(),如果实体被认为是新的,或者调用 EntityManager.merge(),如果实体不被认为是新的。

      所以不,它们不是一回事,而且工作方式也不一样。

      【讨论】:

        猜你喜欢
        • 2013-05-06
        • 2011-05-03
        • 2013-05-03
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        • 2022-01-13
        • 2015-10-01
        • 1970-01-01
        相关资源
        最近更新 更多