我已经使用了以下JPA实现:
冬眠,
排名靠前的,
OpenJPA的
他们每个人都有自己的优点和缺点.我发现Hibernate是三者中最先进的,除了它将一些自己的增强功能与JPA混合在一起,这使得很难切换到其他提供商.最重要的是,在解释JPA时,它的查询解析器更宽松.他们让得到正确的库来支持hibernate变得有点困难,因为我发现它是一个试图获得所有依赖项的正确版本的任务.
Toplink还可以,但是有人觉得它有点瘫痪,因为看起来Oracle希望你使用/购买?他们更高级的图书馆.尝试下载它也是一项任务,因为您需要通过运行jar文件来安装它.我发现它只实现了基础JPA规范.我使用它的原因是hibernate使用了许多常用于其他开源项目的库,人们经常会遇到类问题,特别是在使用JBoss时
OpenJPA - 这是迄今为止最好的文档,易于下载和使用,但它似乎非常错误.也许它只是我的代码,但代码我发现更高级的用法,如OneToMany与CascadeType.all设置的关系似乎没有用.诚然,这可能是我的代码错了,我没有时间测试一个干净的案例,但很多这样的事件让我害怕使用它.我真的希望它变得更好.它的错误消息通常无助于解决问题.
人们使用了哪些其他图书馆,他们更喜欢哪些?为什么?
我对这些实现有相同的结论.
OpenJPA似乎很糟糕
Hibernate有很多库,似乎没有延迟加载所有内容.
Toplink最终成为我的选择.它不像Hibernate那样灵活,但它可以工作,我不必安装commons-logging.
我接下来要尝试的是JPOX,它最近被重命名为datanucleus.
我个人认为OpenJPA还不够成熟.还有其他更成熟的开源库,我宁愿使用它们.这些是我按顺序考虑的:
休眠.Hibernate已经存在了很长时间,并且已经为Java中的ORM铺平了道路.我对Hibernate的唯一问题是许可.这是LGPL许可,可能导致一些商业公司蠕动(原因我不会进入这里).无论如何,如果LGPL对你来说是一个问题,那么转向清楚可能是件好事.
的EclipseLink.关于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出于前面提到的许可问题.