【发布时间】:2011-03-15 04:07:16
【问题描述】:
我想知道是否有人对这些框架的 JPA2.0 实现有经验?特别是与带有 EclipseLink 支持的 Spring3.x 一起使用。
您是否将这些框架和 JPA2.0 用于生产?有任何严重问题吗?
【问题讨论】:
标签: java hibernate jpa eclipselink jpa-2.0
我想知道是否有人对这些框架的 JPA2.0 实现有经验?特别是与带有 EclipseLink 支持的 Spring3.x 一起使用。
您是否将这些框架和 JPA2.0 用于生产?有任何严重问题吗?
【问题讨论】:
标签: java hibernate jpa eclipselink jpa-2.0
EclipseLink 更符合标准,因为它是 JPA 2 的参考实现,Hibernate 存在一些合规性问题,但更成熟。
EclipseLink 的主要优点之一是您可以直接在 JPQL 查询中调用本机 SQL 函数。在 Hibernate 中,这是不可能直接实现的。
但 Hibernate 拥有更大的社区、更好的文档以及更好的错误消息。
【讨论】:
Float 以便能够在对象级别将其设置为null。但是确实有一个bug,你应该报告它。
恕我直言,尽可能使用标准 api 总是更好。您自己的示例完美地说明了这一点。当一个提供商未能按预期工作时,您可以在两个提供商上尝试相同的代码。切换到任何本机 API 会阻止您执行此操作。
如果使用 EclipseLink 作为您的 JPA 2.0 提供程序非常适合您,那么请使用它。如果您确实遇到了问题,请提交 EclipseLink 错误,并在此论坛或 EclipseLink 论坛和新闻组上获得帮助。
【讨论】:
根据我的经验,使用 Java Perf Profiling。 我使用 Eclipselink 构建的应用程序在数据插入和检索方面的性能似乎都比使用 Hibernate 好得多。然而,Hibernate 使用更广泛,并提供了更大的支持论坛。
在生产中,出于这个原因,我将简单地使用 Hibernate。
【讨论】:
只需选择并坚持一个。标准只是最终的指导方针,每个实施者都可以相应地实施或不实施标准。
例如
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 必须为您处理事情。
【讨论】: