我应该使用哪个EJB 3持久性提供程序?

时间:2008-09-18 23:35:40

标签: java orm jpa java-ee

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

  • 休眠
  • KODO
  • OpenJPA的

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

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

6 个答案:

答案 0 :(得分: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的最大优势在于,如果您对其工作原理有疑问,谷歌搜索可能会找到答案。

老实说,我不会考虑上述两个提供商以外的任何内容。

答案 1 :(得分:2)

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

  • Java世界中使用最广泛,最受尊敬的开源持久层;巨大的活跃社区,在大量关键任务应用程序中有很多用途。
  • 如果您希望与应用程序的其余部分(例如Spring等)采用不同的路径,那么您根本不会将自己绑定到J2EE或特定供应商,因为Hibernate仍然会很好用。

答案 2 :(得分:2)

我发现Hibernate有相当好的文档记录,并得到各种缓存技术的良好支持。在非JPA环境中我也比其他人使用它多得多,所以也许我有点偏向于它。

我尝试过使用TopLink Essentials的一些小玩具项目也很好,但我从来没有进入缓存或任何需要提供商特定文档的东西。总的来说,我认为社区对此的支持较少,这也是我最终使用Hibernate的原因之一。

答案 3 :(得分:1)

我使用Hibernate。它非常成熟,效果非常好。我个人没有使用其他任何一个,但我知道Hibernate是那里功能最齐全的JPA提供商之一。另外因为有这么多人使用它,几乎我遇到的所有问题,我都可以通过谷歌搜索快速找到解决方案。

答案 4 :(得分:0)

我最近参与了使用Kodo JPA框架构建的大型企业应用程序。由Kodo生成的SQL通常不具有大量数据的可扩展性。在我看来,它使用外连接产生了太多查询。考虑到在尝试扩展kodo时我们必须更改多少映射,我不建议将其用于大型企业应用程序。甚至我们与之交谈的Oracle代表也试图让客户远离kodo而进入TopLink。 Oracle可能会在未来淘汰kodo。

答案 5 :(得分:0)

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