InfoQ

新闻

JPA框架比较

作者 James Kao译者 宋玮 发布于 2008年1月16日 上午1时39分

社区
Java
主题
数据访问
标签
Hibernate,
JPA,
EJB

java.net刊登了一篇由Sharad Acharya所写的名为Java Persistence Framework: Which, When, and What?的文章,文中比较了四种流行的持久化框架:CMP Entity EJBs、JPA、Hibernate和TopLink。Acharya讨论了每种技术并在一个表格中总结了他的结论,其结论归结为:

JPA
适合J2SE和J2EE的简单框架,并入了其他框架的许多有用特性,但是需要Java 5或更高版。

CMP Entity EJBs
J2EE容器所支持的框架,拥有安全和事务管理、很好的可伸缩性、以及分布式的组件能力,但是耗费资源且学习和使用较为复杂。

Hibernate
简单、灵活的框架,完全免费且易于与其他框架集成,但由于是开源的,因而可能有支持问题。

TopLink

Oracle的中心框架,十分成熟,但是使用它意味着绑死在一个单一厂商上。

该文章引发了相当数量的评论,尤其是围绕着JPA和EJB 3.0中的Entity Beans之间的关系、以及作为开源框架的Hibernate的潜在不利因素方面的评论。

一个评论者在其关于Entity Beans和JPA的评论中这样写道:

该文章讨论了使用JDBC的Bean-Managed Persistence (BMP)与Container-Managed Persistence之间的对比,但是EJB3.0为实体bean持久化引入了一个全新的模型。我必须假设作者在这里讨论的是EJB 2.x。

“远程接口模型”的讨论也暗示了作者仍然在谈论EJB 2.x,而且他文章中的大部分针对Enterprise JavaBean的背景信息及所罗列的缺点实际上是对EJB 1.x和 EJB 2.x而言的,而非针对EJB 3.0。

这有点混乱,因为作者提及了EJB 3.0使用注解消除了许多伴随在以前版本EJB左右的编码困难。但是在下一个句子里他接着说道,“EJB架构的学习和使用绝非易事”,并且罗列了一些以前EJB版本的一些常见问题。

作者还谈到了EJB在其他框架中不能使用,但是EJB 3.0使用了“普通”Java类,它可以在其它框架中使用,只要这些框架忽略掉该普通Java类的JPA注解即可。

JPA作为EJB 3规范的一部分被创建,而且是EJB 3的固有部分。该规范制定者确定符合JPA规范的实现应当支持SE环境。该作者提到了JPA在EJB和SE环境下都可以工作,但是接着又说要使用JPA,Java EE 5是必须的。这不是事实,因为要使JPA工作,SE并不需要依赖于EE。

该篇文章所罗列的JPA的一个“不利因素”是JPA的能力受限于实现厂商。事实是“厂商”必须实现所有规范要求,包括Hibernate(它也是一个JPA实现的“厂商”)。有些人可能不得不自己写类库或框架,唯一的问题是他们所写的类库或框架是否与标准兼容。而其他一些人所涵盖的框架“可能”是基于标准的(构建在标准之上),Java对象关系映射持久化框架自身就是标准,它是一套Java持久化API。

EJB 3.0和JPA之间是单向依赖。任何EJB 3.0实现应当被预期为是大量基于JPA的,但是JPA出现并不意味着EJB必须出现,因为Java SE可以使用JPA。

另一个抱怨把开源作为一个不利因素的描述如下:
我认为我不同意你关于“开源是不利因素”的直白叙述。实际上,这种论调具有一定的误导,它实际上可能会给你的项目增加不利因素。我所工作的一个项目决定用Kodo替代Hibernate,仅仅因为LGPL还不够友好(不利因素,等等)。当我看了代码之后我发现这是多么错误的一个决定……Hibernate那时远远胜出而且现在我仍然这么看。现在维护起来困难且棘手。工作量完全不一样……
尽管如此,有些人还是插话表达对作者主张的支持:
开源项目通常“是”一个不利因素,而且Hibernate确实有严重的支持问题。除非你向该组织付费,否则你将发现他们的支持非常糟糕。Bug报告和特性要求将伴以粗陋的评论而被关闭掉。张贴在论坛上的讨论会被忽略。普通(免费)支持将来也会很困难。

任何正在考虑使用Hibernate的人应该认识到,90%的时间它会像魔法一样在工作,但是你将会浪费“数以天计”的时间修改那剩下的10%。他们通过使产品更难使用和掌控支持来获利,这是他们挣钱的方式,就像其他开源项目一样。

Hibernate最大的易用性问题是其异常消息。有时你会得到一个误导性的错误信息,把你引向一个错误的方向。还有时你会得到非常模糊的信息,让你无法判断什么地方出了错。如果你提出一个RFE,要求他们改善错误报告,你将会得到一个粗陋的评论,而且这个RFE将迅速被关闭。这只是我的个人看法。

查看英文原文:JPA Frameworks Compared

6 条回复

回复

标题翻译的不恰当吧? 发表人 dennis zane 发表于 2008年1月16日 上午4时2分
Re: 标题翻译的不恰当吧? 发表人 dennis zane 发表于 2008年1月16日 上午4时3分
Re: 标题翻译的不恰当吧? 发表人 凉粉 小刀 发表于 2008年1月17日 上午12时47分
感觉译的很差 发表人 静波 曲 发表于 2008年1月16日 下午7时57分
说的还是有几分道理的 发表人 f hway 发表于 2008年1月29日 下午7时12分
不支持Hibernate的做法 发表人 Bob Yang 发表于 2008年2月1日 下午9时27分
  1. 返回顶部

    标题翻译的不恰当吧?

    2008年1月16日 上午4时2分 发表人 dennis zane

    JPA现在一般都是指Java持久层API,而文章标题是java持久层框架的比较,包括JPA、hibernate,甚至ejb2.x的entity bean。

  2. 返回顶部

    Re: 标题翻译的不恰当吧?

    2008年1月16日 上午4时3分 发表人 dennis zane

    文章标题 -> 原文标题

    貌似还有bug,我的评论发表时间怎么是2008年1月16日 上午4时2分?

  3. 返回顶部

    感觉译的很差

    2008年1月16日 下午7时57分 发表人 静波 曲

    看的晕晕的,请教个问题,JPA实现有CMP Entity EJBs吗?

  4. 返回顶部

    Re: 标题翻译的不恰当吧?

    2008年1月17日 上午12时47分 发表人 凉粉 小刀

    这里的时间是服务器时间~~

  5. 返回顶部

    说的还是有几分道理的

    2008年1月29日 下午7时12分 发表人 f hway

    评论说的还是有几分道理的,不过EJB3.0的确有很多的改善.

  6. 返回顶部

    不支持Hibernate的做法

    2008年2月1日 下午9时27分 发表人 Bob Yang

    Hibernate就像微软的作风,让你在不知不觉中陷入到一团乱码中,而你根本不知道它在做些什么,Hibernate的设计师是个很好的JAVA程序员,但他对“数据库”的理解太过肤浅了。

独家内容

剖析短迭代

敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?

应用JSF、Ajax和Seam开发Portlets(1/3)

本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。

AtomServer:数据分发的发布动力(第二部分)

在这篇文章里,Bryon Jacob和Chris Berry将和我们继续探讨AtomServer,它是基于Apache Abdera的完整Atom存储实现。作者还创建了几个Atompub规范扩展,其中包括自动标记、批处理和Feeds聚合。

架构师(试刊第二期)

InfoQ中文站的电子杂志《架构师》试刊第二期出版了!相比于上期,我们在内容的选择安排和版式上都根据读者的意见重新做了修正。“细节决定成败”,我们希望基于InfoQ中文站的专业内容,《架构师》能逐渐成为大家喜欢的电子刊物!

一种正规的性能调优方法:基于等待的调优

在本文中,Steven Haines探讨了Web应用性能调优问题。该领域过去更像是一门艺术而不是一门科学。他提出了一种称为基于等待调优的方法,使整个调优过程更加可度量,也因此更具科学性。

Java程序员ActionScript 3入门

通常来说,改变技术路线时最艰难的部分是辨别语言语法之间的不同。这篇文章就为Java开发者提供了一份如何转向Flex基础语言ActionScript的指南。

浅谈如何创建Rails应用

本视频主要以财帮子为例,介绍了如何创建一个PV为百万级的Rails应用。其中包括:Rails应用的服务器架构、Rails Cache的优化、负载均衡的处理、Web服务器的调试、分布式解决方案、Open API的设计等等。

Alexandru Popescu谈InfoQ.com网站架构

InfoQ首席架构师Alexandru Popescu在采访中谈论了InfoQ架构、Webwork与DWR、Hibernate与JCR、Hibernate可扩展性、最新的InfoQ视频流系统和InfoQ的未来规划。