Java 我应该使用哪个EJB3提供程序?

Java 我应该使用哪个EJB3提供程序?,java,orm,jpa,jakarta-ee,Java,Orm,Jpa,Jakarta Ee,我在一个相当大的J2EE项目上使用EJB3,默认情况下,Netbeans将实体bean的持久提供程序设置为TopLink。可以选择将提供程序更改为以下选项之一,甚至可以添加新的持久性库: 冬眠 科多 OpenJPA 您更喜欢使用哪个持久性提供程序?使用其他提供商的好处是什么 虽然TopLink看起来不错,但我找不到多少关于如何控制缓存等的好文档。任何帮助都将不胜感激 我强烈推荐Hibernate,原因如下: Java世界中使用最广泛、最受尊重的开源持久层;庞大的活跃社区,在高容量任务关键型

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

  • 冬眠
  • 科多
  • OpenJPA
您更喜欢使用哪个持久性提供程序?使用其他提供商的好处是什么


虽然TopLink看起来不错,但我找不到多少关于如何控制缓存等的好文档。任何帮助都将不胜感激

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

  • Java世界中使用最广泛、最受尊重的开源持久层;庞大的活跃社区,在高容量任务关键型应用程序中大量使用
  • 如果您希望与应用程序的其余部分(如Spring等)走不同的路线,那么您根本不需要与J2EE或特定的供应商绑定,因为Hibernate仍然可以很好地发挥作用

我发现Hibernate有很好的文档记录,并且受到各种缓存技术的良好支持。我在非JPA的环境中使用它的次数也比其他的要多,所以我可能因此对它有点偏见


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

我使用Hibernate。它非常成熟,工作起来非常好。我个人没有使用过其他任何一种,但我知道Hibernate是功能最全的JPA提供商之一。也因为有这么多人在使用它,就我所遇到的每一个问题,我可以很快找到一个解决方案,有一点Google。

< P>只有两个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是否具有与EclipseLink的批处理查询提示等价的功能,但它是处理此类问题的一个非常有用的功能

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


我真的不想考虑上述两个供应商的任何东西。

< P>我最近在用KodoJPA框架构建了一个大型企业应用程序。Kodo生成的SQL通常不具有很强的可扩展性,并且数据量很大。在我看来,它产生了太多带有外部联接的查询。考虑到在尝试扩展kodo时需要更改多少映射,我不建议将其用于大型企业应用程序。就连我们采访过的甲骨文代表也在试图让客户从kodo转向TopLink。Oracle可能在未来逐步淘汰kodo

>数据核也是一个完全兼容的JPA提供者,JPA1和一些预览JPA2特性

为什么不考虑OpenJPA?每种实现都有其优缺点。。。