NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

JPA 框架比较

  • 2008-01-16
  • 本文字数:1745 字

    阅读完需:约 6 分钟

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

2008-01-16 01:3917067
用户头像

发布了 150 篇内容, 共 43.4 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

DeFi 金融借贷系统 DAPP开发现成模板

西安链酷科技

数字电源浅析

智趣匠

数字 电源

npm install报错问题解决合集

百度搜索:蓝易云

node.js Linux 运维 npm 云服务器

简单shell脚本的编写教程

百度搜索:蓝易云

云计算 Linux 运维 Shell 云服务器

苹果电脑3D壁纸屏保 Screen Wonders动态壁纸

Rose

动态壁纸 Screen Wonders壁纸 苹果电脑屏保 mac屏保

AI时代,存强则强

脑极体

AI

解读 Xend Finance:向 RWA 叙事拓展,构建更具包容性的 DeFi 体系

股市老人

解读 Xend Finance:向 RWA 叙事拓展,构建更具包容性的 DeFi 体系

股市老人

详解SpringBoot的常用注解

百度搜索:蓝易云

云计算 Linux 运维 springboot 云服务器

想在Mac电脑上畅玩Windows游戏,那就试试CrossOver 24虚拟机吧!

Rose

CrossOver 24 CrossOver 24虚拟机 如何在Mac运行win 苹果电脑虚拟机软件

IntelliJ IDEA 2023:智能编码,让开发更高效!

Rose

ide 编程开发 IntelliJ IDEA 2023破解 IntelliJ IDEA 2023 IDEA 2023激活码

DeFi 借贷质押系统 APP 开发|DeFi 借贷质押软件开发

西安链酷科技

DeFi 质押挖矿 APP 系统开发|DeFi 质押挖矿软件开发

西安链酷科技

DeFi流动性挖矿

《Java核心技术·卷 II(原书第11版)》PDF

程序员李木子

牛市下一个板块该轮到谁?Gamefi赛道爆发你吃到了多少?

石头财经

【分布式技术】分布式理论基础

L L

架构设计 分布式技术 Java技术

Nacos启动常见报错解决方法

百度搜索:蓝易云

云计算 Linux 运维 nacos 云服务器

达芬奇调色软件破解版 davinci resolve 18.6.6最新中文安装包

Rose

DaVinci Resolve 破解 DaVinci Resolve18下载 达芬奇下载 达芬奇视频调色

源码解析丨一次慢SQL排查

GreatSQL

慢查询

AI能翻译动物语言吗?

算AI

人工智能

七大年度奖项揭晓!40+优秀白帽齐聚百度安全BSRC年度盛典

百度安全

centos用ssh登录连接缓慢处理

百度搜索:蓝易云

Linux centos 运维 SSH 云服务器

全智能深度演进,一键成片让视频创作颠覆式提效

阿里云视频云

云计算 媒体 云剪辑

牛市下一个板块该轮到谁?Gamefi赛道爆发你吃到了多少?

长安区块链

flowjo 10破解版图文教程 flowjo 10 mac专业的细胞分析工具

Rose

mac软件下载 流式细胞分析软件 FlowJo 10下载 FlowJo 10破解版

数字人的永生:科技还是幻想?

青否数字人

数字人

keyshot2023怎么保存低版本(keyshot2023下载安装教程)

Rose

KeyShot2023pro安装包 keyshot2023下载

DeFi 交易所系统 APP开发|DeFi 交易所软件开发

西安链酷科技

工业物联网App开发:连接未来智能制造的关键

天津汇柏科技有限公司

数字化转型 工业物联网

AJAX 前端开发利器:实现网页动态更新的核心技术

小万哥

xml 程序人生 编程语言 软件工程 前端开发

Puppeteer实践:复杂的问题简单化

南城FE

JavaScript 前端 nodejs puppeteer

JPA框架比较_Java_James Kao_InfoQ精选文章