34

我使用了以下 JPA 实现:

  1. 冬眠,
  2. 顶联,
  3. OpenJPA

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

Toplink 还可以,但给人的感觉是它有点残缺,因为甲骨文似乎希望你使用/购买?他们更先进的图书馆。尝试下载它也是一项任务,因为您需要通过运行 jar 文件来安装它。我发现它只实现了基本的 JPA 规范。我使用它的原因是 hibernate 使用了很多其他开源项目中常用的库,这些库经常会遇到类加载问题,尤其是在使用 JBoss 时

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

人们还使用了哪些其他库,他们更喜欢哪些库,为什么?

4

3 回答 3

18

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

  1. OpenJPA 是/似乎有问题

  2. Hibernate 有大量的库,并且似乎无法延迟加载所有内容。

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

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

于 2009-02-23T06:22:07.303 回答
7

我个人觉得 OpenJPA 还不够成熟。还有其他更成熟的开源库,我宁愿使用它们。这些是我会按顺序考虑的:

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

  2. Eclipse 链接。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 解决了我之前提到的许可问题。

于 2009-02-23T13:51:59.953 回答
4

OpenJPA 被称为 Kodo,这是 BEA 很久以前购买的。Kodo 是 JDO 的实现,现在是 JPA。此外,我们非常密集地使用 OpenJPA。因此,我不会说它不成熟。很好但是我建议使用 Hibernate,即围绕 Hibernate 的 JPA 包装器。

原因?1) JPA 与 Hibernate 非常非常相似 2) 许多工作岗位都有 Hibernate 要求。最好还是靠主流产品……基本上

于 2009-02-24T15:55:59.320 回答