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

  • 休眠
  • 科多
  • OpenJPA

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

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

有帮助吗?

解决方案

我只考虑使用两个 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 的最大优点是,如果您对它的工作原理有疑问,Google 搜索可能会找到答案。

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

其他提示

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

  • Java世界中使用最广泛、最受尊敬的开源持久层;庞大的活跃社区以及在大容量关键任务应用程序中的大量使用。
  • 如果您希望对应用程序的其余部分(例如 Spring 等)采取不同的路线,那么您根本不必将自己与 J2EE 或特定供应商联系起来,因为 Hibernate 仍然可以很好地发挥作用。

我发现 Hibernate 有相当完善的文档,并且得到各种缓存技术的良好支持。我在非 JPA 环境中也比其他人更多地使用它,因此也许我对它有点偏见。

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

我使用休眠。它非常成熟并且工作得非常好。我个人没有使用过其他任何一个,但我确实知道 Hibernate 是功能最齐全的 JPA 提供程序之一。另外,因为很多人都在使用它,几乎我遇到的所有问题,我都可以通过谷歌搜索快速找到解决方案。

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

数据核心 http://www.datanucleus.org 也是一个完全兼容的 JPA 提供商,具有 JPA1 和一些预览 JPA2 功能

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top