我在一个相当大的 J2EE 项目上使用 EJB 3,默认情况下,Netbeans 将实体 bean 的持久提供程序设置为 TopLink。可以选择将提供程序更改为以下之一,甚至添加新的持久性库:
- 休眠
- 古多
- OpenJPA
您更喜欢使用哪个持久性提供程序?使用其他提供商有什么好处?
虽然 TopLink 似乎很好,但我找不到太多关于如何控制缓存等的好文档。任何帮助将不胜感激。
我在一个相当大的 J2EE 项目上使用 EJB 3,默认情况下,Netbeans 将实体 bean 的持久提供程序设置为 TopLink。可以选择将提供程序更改为以下之一,甚至添加新的持久性库:
您更喜欢使用哪个持久性提供程序?使用其他提供商有什么好处?
虽然 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 的最大优势在于,如果您对它的工作原理有疑问,谷歌搜索很可能会为您找到答案。
老实说,除了上述两个提供商之外,我不会考虑其他任何东西。
我强烈推荐 Hibernate,原因如下:
我发现 Hibernate 有很好的文档记录,并且得到了各种缓存技术的良好支持。在非 JPA 上下文中,我也比其他人更多地使用它,所以也许我因此对它有点偏见。
我使用 TopLink Essentials 尝试过的几个小玩具项目也运行良好,但我从未涉足缓存或任何需要提供者特定文档的事情。总的来说,我认为社区对此的支持较少,这也是我最终使用 Hibernate 的部分原因。
我使用休眠。它非常成熟,效果很好。我个人没有使用过其他任何一种,但我知道 Hibernate 是目前功能最齐全的 JPA 提供程序之一。也因为有这么多人在使用它,几乎我遇到的每一个问题,我都可以通过谷歌搜索快速找到解决方案。
我最近研究了一个使用 Kodo JPA 框架构建的大型企业应用程序。Kodo 生成的 SQL 通常在处理大量数据时不太具有可扩展性。在我看来,它产生了太多带有外部连接的查询。考虑到在尝试扩展 kodo 时我们必须更改多少映射,我不建议将它用于大型企业应用程序。甚至与我们交谈过的 Oracle 代表也在试图让客户从 kodo 转向 TopLink。甲骨文可能会在未来逐步淘汰 kodo。
DataNucleus http://www.datanucleus.org也是一个完全兼容的 JPA 提供程序,具有 JPA1 和一些预览 JPA2 功能