3

我在一个相当大的 J2EE 项目上使用 EJB 3,默认情况下,Netbeans 将实体 bean 的持久提供程序设置为 TopLink。可以选择将提供程序更改为以下之一,甚至添加新的持久性库:

  • 休眠
  • 古多
  • OpenJPA

您更喜欢使用哪个持久性提供程序?使用其他提供商有什么好处?

虽然 TopLink 似乎很好,但我找不到太多关于如何控制缓存等的好文档。任何帮助将不胜感激。

4

6 回答 6

7

我只考虑使用两个 JPA 提供程序:

如果您想坚持使用标准 JPA,我会使用 EclipseLink。虽然 Toplink Essentials 是 JPA 1.0 的参考实现,但 EclipseLink 基本上继承了 TopLink Essentials 代码,并将成为 JPA 2.0 的参考实现(并在发布时与 Glassfish V3 捆绑在一起;预计在 2009 年 5 月围绕 JavaOne)。TopLink Essentials 是 Oracle 的商业 TopLink 产品的一个有点残缺的版本,但 EclipseLink 基本上具有 TopLink 的所有功能。

另一个选择显然是 Hibernate。它被广泛使用和成熟,但并不是我所看到的问题。例如,上次我查看了 Hibernate 与具有多个一对多渴望关系的实体存在问题。我不知道 Hibernate 是否具有与 EclipseLink 的批处理查询提示等效的功能,但它是处理此类问题的一个非常有用的功能。

Hibernate 当然也支持标准的 JPA。Hibernate 的最大优势在于,如果您对它的工作原理有疑问,谷歌搜索很可能会为您找到答案。

老实说,除了上述两个提供商之外,我不会考虑其他任何东西。

于 2008-09-19T00:34:53.843 回答
2

我强烈推荐 Hibernate,原因如下:

  • Java 世界中使用最广泛和最受尊敬的开源持久层;庞大的活跃社区,并在大量关键任务应用程序中大量使用。
  • 如果您希望与应用程序的其余部分(例如 Spring 等)走不同的路线,那么您根本不需要将自己与 J2EE 或特定供应商联系起来,因为 Hibernate 仍然可以很好地发挥作用。
于 2008-09-19T00:00:33.537 回答
2

我发现 Hibernate 有很好的文档记录,并且得到了各种缓存技术的良好支持。在非 JPA 上下文中,我也比其他人更多地使用它,所以也许我因此对它有点偏见。

我使用 TopLink Essentials 尝试过的几个小玩具项目也运行良好,但我从未涉足缓存或任何需要提供者特定文档的事情。总的来说,我认为社区对此的支持较少,这也是我最终使用 Hibernate 的部分原因。

于 2008-09-19T00:01:32.817 回答
1

我使用休眠。它非常成熟,效果很好。我个人没有使用过其他任何一种,但我知道 Hibernate 是目前功能最齐全的 JPA 提供程序之一。也因为有这么多人在使用它,几乎我遇到的每一个问题,我都可以通过谷歌搜索快速找到解决方案。

于 2008-09-19T00:02:34.997 回答
0

我最近研究了一个使用 Kodo JPA 框架构建的大型企业应用程序。Kodo 生成的 SQL 通常在处理大量数据时不太具有可扩展性。在我看来,它产生了太多带有外部连接的查询。考虑到在尝试扩展 kodo 时我们必须更改多少映射,我不建议将它用于大型企业应用程序。甚至与我们交谈过的 Oracle 代表也在试图让客户从 kodo 转向 TopLink。甲骨文可能会在未来逐步淘汰 kodo。

于 2008-09-19T21:15:54.553 回答
0

DataNucleus http://www.datanucleus.org也是一个完全兼容的 JPA 提供程序,具有 JPA1 和一些预览 JPA2 功能

于 2009-03-21T14:27:23.597 回答