JPA 实现 - 哪一个最适合使用?[已关闭]

2022-09-01 07:50:16

我使用了以下 JPA 实现:

  1. 冬眠
  2. 顶链接,
  3. OpenJPA

他们每个人都有自己的优点和缺点。我发现Hibernate是三者中最先进的,除了它将自己与JPA的一些增强功能混合在一起,这使得很难切换到其他提供商。最重要的是,它的查询解析器在解释JPA时要宽松得多。它们使得获得正确的库来支持休眠变得有点困难,因为我发现这是一项试图获得所有依赖项的正确版本的任务。

Toplink还可以,但有人觉得它有点残缺,因为Oracle似乎希望你使用/购买?他们更高级的库。尝试下载它也是一项任务,因为您需要通过运行jar文件来安装它。我发现它只实现了基本的JPA规范。我使用它的原因是休眠使用了很多在其他开源项目中常用的库,人们经常会遇到类问题,特别是在使用JBoss时。

OpenJPA - 这是迄今为止最好的文档,易于下载和使用,但它似乎非常错误。也许它只是我的代码,但我发现更高级的代码,例如与CascadeType.all set的OneToMany关系似乎不起作用。诚然,可能是我的代码是错误的,我没有时间测试一个干净的案例,但像这样的许多事件让我害怕使用它。我真的希望它变得更好。它的错误消息在帮助解决问题方面通常毫无用处。

人们还使用过哪些其他图书馆,他们更喜欢哪些图书馆,为什么?


答案 1

我对这些实现有同样的结论。

  1. OpenJPA是/似乎有缺陷

  2. Hibernate有大量的库,似乎在不延迟加载所有内容方面遇到了麻烦。

  3. Toplink最终成为我的选择。它不像Hibernate那样灵活,但它可以工作,我不必安装commons-log

我接下来要尝试的是JPOX,它最近被重命名为datanucleus


答案 2

就个人而言,我不认为OpenJPA已经足够成熟了。还有其他更成熟的开源库,我宁愿使用它们。这些是我会按顺序考虑的:

  1. 冬眠。Hibernate已经存在了很长时间,并且确实为Java中的ORM铺平了道路。我对Hibernate的唯一问题是许可。它是LGPL许可的,可能会导致一些商业公司蠕动(出于我不会在这里讨论的原因)。无论如何,如果LGPL对您来说是一个问题,那么避开它可能是件好事。

  2. EclipseLink.关于日食链接的一些背景。Toplink Essentials是Oracle的JPA实现的免费版本。EclipseLink取自Toplink,这是Oracle成熟的JPA实现。EclipseLink将成为Glassfish v3.0的JPA 2.0提供商,所以看起来一切都在从Toplink Essentials转移到EclipseLink。虽然EclipseLink版本只有1.0.2,但该产品已经以其他名称存在了很长时间。

我正在做的一个项目现在在Toplink Essentials上,但我们计划很快切换到Eclipselink。Hibernate因我之前提到的许可问题而出局。


推荐