作者 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将迅速被关闭。这只是我的个人看法。
分享到:
相关推荐
JPA框架的集成使用 package com.itcast.bean.product; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @...
总结来说,这个"spring Data JPA框架实例"涵盖了Spring Data JPA的基本用法,包括数据库操作、登录验证和分页查询。通过学习和实践这个实例,开发者能够快速理解和掌握Spring Data JPA的精髓,从而在实际项目中高效...
**OpenJPA框架** OpenJPA是Apache软件基金会的一个项目,它实现了JPA规范,为Java应用提供了一种标准的方式来访问和操作数据库。OpenJPA的主要功能有: 1. **实体管理(Entity Manager)**:负责创建、保存、更新...
在"最基础的spring-boot-jpa框架"中,我们可以深入探讨以下几个关键知识点: 1. **Spring Boot 简介**:Spring Boot 通过“约定优于配置”的原则,简化了Spring应用的配置。它默认配置了很多常见的应用设置,比如...
### SSH框架和JPA+EJB+JSF框架的比较 #### 一、SSH框架解析 SSH框架是由Struts、Spring和Hibernate三个独立的框架组成的,它们分别负责不同的职责:Struts用于构建MVC架构的表现层;Spring作为核心的依赖注入(DI...
Spring Boot和JPA框架是现代Java开发中的两个关键组件,它们极大地简化了应用程序的构建过程。Spring Boot以其“开箱即用”的理念,为开发者提供了快速启动和运行应用的便利,而JPA(Java Persistence API)则是Java...
Spring MVC + Shiro + QueryDSL + JPA 框架多数据源配置详细说明 Spring MVC + Shiro + QueryDSL + JPA 框架多数据源配置是当前 Web 应用程序中常见的技术栈组合。该技术栈组合可以提供强大的安全认证、数据查询和...
本压缩包包含的是JPA框架所需的jar包,这些库文件对于实现JPA功能是至关重要的。ORM框架如Hibernate、EclipseLink等都是JPA的实现,它们将Java对象与数据库表进行映射,使得程序能够以对象的方式操作数据库。 JPA的...
**Hibernate** 是一个流行的开源ORM框架,它是JPA的一个实现。Hibernate提供了更丰富的功能和更灵活的配置,包括对HQL(Hibernate Query Language)的支持,它是一种面向对象的查询语言,类似于SQL但更加面向对象。...
velox-jpa轻量级JPA框架设计源码:该项目基于Java开发,包含151个文件,主要使用Java语言。velox-jpa是一个轻量级的JPA框架,具有强大的扩展性和灵活性,支持对象关系映射(ORM),适用于Java应用的数据库操作和数据...
**基于Struts 2 + Spring + JPA框架的WEB应用详解** 在现代的Java Web开发中,使用MVC(Model-View-Controller)设计模式已经成为主流。Struts 2、Spring和Java Persistence API (JPA) 是三个强大的开源框架,它们...
Spring Data JPA通过Repository接口抽象了ORM(Object-Relational Mapping)框架,如Hibernate,让开发者可以以更简洁的方式执行CRUD(创建、读取、更新、删除)操作。 在提供的"spring-springmvc-springdata-...
### JPA框架新技术:注解 #### 一、引言 随着Java技术的不断发展与进步,JPA(Java Persistence API)作为一种重要的持久层规范,在Java应用开发中扮演着越来越重要的角色。尤其在JDK 1.6引入了注解之后,JPA的...
本文将深入探讨如何利用Maven整合Spring MVC与JPA框架,构建一个现代化的Web应用程序。 **Maven** Maven是一款项目管理和综合工具,它帮助开发者管理项目的构建、报告和文档。通过Maven的POM(Project Object ...
将这些框架结合在一起搭建项目时,首先需要在Maven的pom.xml文件中添加Spring、SpringMVC和JPA的相关依赖。然后,配置Spring的ApplicationContext.xml,定义Bean,包括数据源、实体管理工厂、事务管理器等。接着,为...
标题中的“JPA+SPRING权限系统初步框架”是指基于Java Persistence API (JPA) 和Spring框架构建的一个初步的权限管理系统。这样的系统主要用于管理用户权限,确保不同用户只能访问其被授权的数据或功能。 1. **Java...
该项目是针对Java语言的JPA框架设计与实践教程源码,总计包含225个文件,其中167个为XML配置文件,35个为Java源文件,还包括9个xlsx文件、5个iml文件、2个md文件、2个xls文件、2个class文件、1个idea工作空间文件、1...
**Spring Data JPA 知识点详解** Spring Data JPA 是 Spring Framework 的一个模块,它为 Java Persistence API(JPA)提供了一种便捷的访问数据库的方式。通过 Spring Data JPA,开发者可以极大地减少编写与数据...
《基于Spring+JPA框架的电子政务基础平台》是一份深度探讨如何利用Spring框架和Java Persistence API(JPA)构建高效、稳定且可扩展的电子政务系统的文档。在这个平台上,Spring作为核心的业务层框架,提供了强大的...
SpringMVC+Spring+JPA+Maven框架搭建 SpringMVC+Spring+JPA+Maven框架的搭建涉及到一系列的技术组件,其中SpringMVC是Spring框架的一个模块,用于构建Web应用,提供MVC架构;Spring框架是一套全面的企业级应用开发...