我在相当大的J2EE项目上使用EJB 3,默认情况下,Netbeans将实体bean的持久提供程序设置为TopLink。可以选择将提供程序更改为以下之一,甚至添加新的持久性库:
您更喜欢使用哪种持久性提供程序?使用其他提供商有什么好处?
虽然TopLink似乎很好,但我找不到很多关于如何控制缓存等的好文档。任何帮助都会非常感激。
答案 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,原因如下:
答案 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功能