JPA框架比较

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

 

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将迅速被关闭。这只是我的个人看法。

时间: 2024-10-28 00:09:09

JPA框架比较的相关文章

spring+springmvc+springdata+jpa框架怎么连接两个不同的数据库

问题描述 spring+springmvc+springdata+jpa框架怎么连接两个不同的数据库 一个是本地mysql数据库,一个是orcale数据库 有没有demo看一下 解决方案 http://blog.csdn.net/jaune161/article/details/44014937 解决方案二: springmvc多数据源的配置和使用,可以参考:http://my.oschina.net/wangjiankui/blog/49107

MyEclipse 6.0:整合JPA框架

MyEclipse 6.0的发布极大的增强了Eclipse 3.3/Europa集成开发环境的功能,增加了Java 6支持的组件和加快了AJAX的开发率,革命性的提高了开发者的开发效率. 另外,MyEclipse 6.0现在已经和Spring.JPA整合.这项整合,允许用户们创建实体管理器和事务beans, 生成实体和DOA.这些功能很大程度上多亏有了MyEclipse. Genuitec的前开发负责人Wayne Parrott说:"我极度的自豪,因为当前这个MyEclipse版本的发布,MyE

框架-谁能共享一下jpa的文档资料?

问题描述 谁能共享一下jpa的文档资料? 公司要用jpa框架,以前一直没接触过,有哪位大哥共享一下资料!!!! 解决方案 参考下http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/http://blog.csdn.net/zxl315/article/details/http://wenku.baidu.com/link?url=wwqf7O9dGTIE5cJHkyf_p6z9etTXthRToi6nHvmh7xsrp

JPA简介

JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 起源 Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用的对象持久化的开发工作:其二,Sun希望整合对ORM技术,实现天下归一. JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分.但它不囿于EJB 3.0,你可以在Web应用.甚至桌面应用中使用.JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容

Java Persistence with Hibernate中文版Hibernate实战第2版出版

Java Persistence with Hibernate中文版Hibernate实战第2版出版 图灵出版社官方Hibernate实战(第2版)链接为: http://www.turingbook.com/Books/ShowBook.aspx?BookID=260 书 名: Hibernate实战(第2版) 评论星级: **** 书 号: 978-7-115-17448-2 原 书 名: Java Persistence with Hibernate 原出版社: Manning Publi

使用Apache OpenJPA开发EJB 3.0应用,第8部分

在Java EE环境下开发.部署OpenJPA 应用 在 本系列 文章的第 1 部分:OpenJPA 与 EJB 3.0中介绍 OpenJPA 时,曾经 提到"OpenJPA 可以作为独立的持久层框架发挥作用,也可以轻松的与其它 Java EE 应用框架或者符合 EJB3.0 标准的容器集成",在本系列的前面几篇文章中都 只是讲解了如何将 OpenJPA 作为独立的持久层框架发挥作用,在本文中,我们将 会了解如何在 JBoss 应用服务器中使用 OpenJPA 开发实体 Bean.并且

jdbc-jdbcTemplate-hibernate-jpa-springDataJpa系列(二)

1 前面的文章索引 jdbc开发和事务的使用 spring-jdbcTemplate开发和事务的使用 hibernate的原生xml方式开发和事务的使用 hibernate的原生xml方式与spring集成以及事务的使用 hibernate的原生注解方式开发和事务的使用 hibernate的注解方式开发与Spring集成和事务的使用 详见第一篇文章jdbc-jdbcTemplate-hibernate-jpa-springDataJpa系列(一) 这里继续第一篇文章的内容,开始介绍jpa 2 j

Hibernate 性能优化法则

Hibernate 是 Java EE 应用中流行的 JPA 框架,简单易用,但很多使用过 Hibernate 的开发者都普遍反映 Hibernate 性能低下.究其原因,还是使用者没有对 Hibernate 进行过深入理解,对 Hibernate 的应用也只是浮于表面.本文介绍了几种简单实现 Hibernate 性能优化的方法. 启用 Hibernate 数据统计策略 没有测量就没有优化.启用 Hibernate 数据统计策略,用来做优化前后的数据对比. 将 hibernate.generat

为app提供api,架构该怎么设计,需要考虑高并发,访问量比较大。

问题描述 有个项目需要重构:原来一个java后端服务的项目,用的是简单的servlet和JDBC 为 android app 提供的api,并发访问通过单例.线程池和多线程.缓存做的.现在相对这个项目进行重构,考虑设计一套 restful风格的api,不知道有什么成熟的 rest框架可以推荐下.数据库部分的框架ibaits是否合适?高并发访问在写代码的时候又应该注意那些地方?总结下:在高并发访问,主从多数据库的情况下,1.restFUL api 该选用什么成熟的框架?2.数据库部分选用什么框架比