【问题标题】:Hibernate or JPA?休眠还是 JPA?
【发布时间】:2010-11-30 09:08:52
【问题描述】:

Spring 3.0推荐使用hibernate或者JPA,Spring 3.0使用它们的优缺点是什么?

注意:我们还假设将它与 Spring Data Access 一起使用。

【问题讨论】:

    标签: java hibernate spring jpa


    【解决方案1】:

    我会说,Hibernate 提供的 JPA 实现。为什么?因为

    • 如果您需要,以后切换到其他 JPA 实现会更容易
    • Hibernate 是主要和最受欢迎的 ORM 之一
    • 大量书籍可供选择
    • 大量的文档,很棒的参考资料
    • 很容易在 SO 和其他地方获得支持

    实际上,我也不介意使用 Hibernate 独有的功能。我认为坚持使用 Hibernate 没有任何问题,只是因为它不是标准。顺便说一句,是什么让你认为 Spring 是标准的。它不是,你可以接受它,因为它有效。 Hibernate 也可以这样说。如果您不知道自己在做什么,Hibernate 有时会变得多毛。

    【讨论】:

      【解决方案2】:

      我的首选是带有 EclipseLink 的 JPA。原因:

      Bozho:我发现了一些,不幸的是它并不那么明显,因为它只发生在一些极端情况下。我能想到的一些:

      • Convert JQL to CriteriaBuilder
      • ElementCollection 与 JoinTable 一起工作正常,这是错误的! ElementCollection 应该伴随着 CollectionTable。

      【讨论】:

      • 什么是奇怪的实现?我没有遇到过休眠问题。
      • 调试 Hibernate 是地狱,我同意这一点。但它工作正常。
      • FWIW“参考实现”仅表示“证明规范可以实现的概念证明”。这并不意味着“最好”、“首选”或其他任何东西。这根本不会使您的建议无效,只是该特定声明(关于成为 RI)本身毫无价值。
      【解决方案3】:

      准确地说,你应该使用Java Persistence API,然后你可以使用Hibernate作为实现。

      没有实现的 JPA 一文不值。

      JPA 是一个标准,所以如果你只使用它的 API,你可以用一些其他的 JPA 实现来替代 Hibernate。如果您使用 Hibernate 的某些特定 API,因为您需要普通 JPA 未提供的功能,您将遇到供应商锁定场景,因此您必须小心这一点。

      【讨论】:

        【解决方案4】:

        这取决于我们的应用程序。

        如果您不确定永远不需要更改持久性提供程序,强烈建议使用 JPA (2.0)

        如果您确定永远不会更改持久性提供程序,那么我建议您也使用 JPA (2.0)。但是(仅)在这种情况下,如果您遇到标准 JPA 无法解决的问题,您可以使用您选择的 JPA-Provider 的专有功能。 -- 但是要明智地使用它,如果您选择这种方式一次,就很难回头!

        当然,JPA 只是一个 API - 所以您需要实现它。 -- 我使用 Hibernate 作为 JPA 提供程序,但主要是因为我一直处于第二种情况(永远不会改变它),并且我需要像 Hibernate-Search 和 Envers 这样的附加功能。

        【讨论】:

          猜你喜欢
          • 2011-05-10
          • 1970-01-01
          • 2016-01-19
          • 2013-06-19
          • 2011-06-25
          • 1970-01-01
          • 2021-06-25
          • 2012-04-19
          • 2013-01-29
          相关资源
          最近更新 更多