JPA实现 - 哪一个最好用?

时间:2009-02-23 06:10:08

标签: java hibernate jpa toplink openjpa

我已经使用了以下JPA实现:

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

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

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

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

3 个答案:

答案 0 :(得分:18)

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

  1. OpenJPA似乎有点儿

  2. Hibernate有大量的库,似乎没有没有延迟加载所有内容。

  3. Toplink最终成为我的选择。它不像Hibernate那样灵活,但它可以工作,我不必安装 commons-logging
  4. 我接下来要尝试的是JPOX,最近已将其重命名为datanucleus

答案 1 :(得分:7)

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

  1. 休眠。 Hibernate已经存在了很长时间,并且已经为Java中的ORM铺平了道路。我对Hibernate的唯一问题是许可。这是LGPL许可,可能导致一些商业公司蠕动(原因我不会进入这里)。无论如何,如果LGPL对你来说是一个问题,那么转向清楚可能是件好事。

  2. 的EclipseLink。关于eclipselink的一些背景知识。 Toplink Essentials是Oracle免费版的JPA实现。 EclipseLink取自Toplink,这是Oracle完整的JPA实现。 EclipseLink将成为Glassfish v3.0的JPA 2.0提供者,因此看起来所有东西都从Toplink Essentials转移到EclipseLink。尽管EclipseLink版本仅为1.0.2,但该产品已经在其他名称下使用了很长时间。

  3. 我正在开发的项目目前正在使用Toplink Essentials,但我们计划很快切换到Eclipselink。 Hibernate是出于我之前提到的许可问题。

答案 2 :(得分:4)

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

原因? 1)JPA与Hibernate非常相似 2)许多职位都有Hibernate要求。最好是倾向于主流产品......基本上