【问题标题】:Hibernate or EclipseLink for JPA? [closed]用于 JPA 的 Hibernate 或 EclipseLink? [关闭]
【发布时间】:2011-03-15 04:07:16
【问题描述】:

我想知道是否有人对这些框架的 JPA2.0 实现有经验?特别是与带有 EclipseLink 支持的 Spring3.x 一起使用。

您是否将这些框架和 JPA2.0 用于生产?有任何严重问题吗?

【问题讨论】:

    标签: java hibernate jpa eclipselink jpa-2.0


    【解决方案1】:

    EclipseLink 更符合标准,因为它是 JPA 2 的参考实现,Hibernate 存在一些合规性问题,但更成熟。

    EclipseLink 的主要优点之一是您可以直接在 JPQL 查询中调用本机 SQL 函数。在 Hibernate 中,这是不可能直接实现的。

    但 Hibernate 拥有更大的社区、更好的文档以及更好的错误消息。

    【讨论】:

    • 我不同意。作为 RI 并不会让您更加合规,尽管它们应该符合 JPA 2.0,但我都遇到了这两种实现的问题,请参阅this question for example。 TCK 并不详尽。
    • 嗯,我提出问题的原因是我认为也存在合规问题。 Pascal 已经尝试过提供帮助,但没有奏效(请参阅stackoverflow.com/questions/3225103/…)。简而言之,我正在尝试使用可为空的属性,而 Hibernate/MySQL 的行为不像预期的那样。我已经用 EclipseLink(相同的代码)尝试了同样的方法,它可以工作。但是,您说 EcipeLink 有它自己的问题。那是真的,真的很难过。是否恰当地说:最好不要使用 JPA2 而是使用纯 Hibernate 语法?
    • @erlord,如果这是 Hibernate 错误,请将其作为问题提交到 Hibernate JIRA。我仍然会继续使用 JPA 注释和基于注释的配置。
    • @Timo 我同意 Hibernate 与 JPQL @erlord 存在一些“故障”我在所有主要的 JPA 实现中都遇到过错误,并且相信随着时间的推移情况会变得更好,我仍然继续使用 JPA。在您的特定情况下,我建议无论如何都使用Float 以便能够在对象级别将其设置为null。但是确实有一个bug,你应该报告它。
    • @all:请考虑一下我在stackoverflow.com/questions/3225103/… 上对前面提到的问题的自我回答……这不是休眠错误,而是我能力的错误;-) 因此,我将携带使用 Hibernate,只是因为更大的社区,使用 JPA2,因为它是标准的
    【解决方案2】:

    恕我直言,尽可能使用标准 api 总是更好。您自己的示例完美地说明了这一点。当一个提供商未能按预期工作时,您可以在两个提供商上尝试相同的代码。切换到任何本机 API 会阻止您执行此操作。

    如果使用 EclipseLink 作为您的 JPA 2.0 提供程序非常适合您,那么请使用它。如果您确实遇到了问题,请提交 EclipseLink 错误,并在此论坛或 EclipseLink 论坛和新闻组上获得帮助。

    【讨论】:

      【解决方案3】:

      根据我的经验,使用 Java Perf Profiling。 我使用 Eclipselink 构建的应用程序在数据插入和检索方面的性能似乎都比使用 Hibernate 好得多。然而,Hibernate 使用更广泛,并提供了更大的支持论坛。

      在生产中,出于这个原因,我将简单地使用 Hibernate。

      【讨论】:

        【解决方案4】:

        只需选择并坚持一个。标准只是最终的指导方针,每个实施者都可以相应地实施或不实施标准。

        例如

        • EclipseLink 在使用诸如 JPA @Converters 之类的基本内容时遇到问题,但据说最近已通过 IBM http://www-01.ibm.com/support/docview.wss?uid=swg1PI73277 修复

        • Hibernate 的 JPQL 实现不理解独立的布尔值,更具体地说,我不得不更改我的 JPQL 来表示

          from Participant p where not p.cancelled

          from Participant p where p.cancelled = false

        另一件事是您在 Spring 中构建东西,您可能会采用不正确但常见的方法将类加载器更改为 PARENT_LAST 顺序,以便使用您的类而不是应用程序服务器。

        如果您打算以正确的方式使用应用程序服务器附带的 JPA,请注意您的应用程序服务器实现可能存在错误。

        您的应用程序的事务明智,特别是 Spring 必须为您处理事情。

        【讨论】:

          猜你喜欢
          • 2011-02-03
          • 1970-01-01
          • 2011-01-04
          • 2011-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多