写点什么

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:3917146
用户头像

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

关注

评论

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

Kubernetes集群的ETCD分布式数据库高可用原理解析

inBuilder低代码平台

开源 云原生 Kubernetes, 云原生, eBPF

智胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐

不在线第一只蜗牛

人工智能 AI

涨见识了!脱离vue项目竟然也可以使用响应式API

快乐非自愿限量之名

JavaScript Vue 前端

2024年团队任务分配软件推荐:7大热门工具

爱吃小舅的鱼

团队管理 任务管理 任务管理工具 任务分配工具 团队任务管理

【YashanDB知识库】使用select * 创建的物化视图无法进行查询重写

YashanDB

yashandb 崖山数据库 崖山DB

MySQL 备库可以设置 sync_binlog 非 1 吗?

爱可生开源社区

MySQL 数据库 MySQL主从复制

商品图片与详情描述:1688 API返回值的重要部分

技术冰糖葫芦

API 文档 API 测试 API 优先 API Hub

探索最佳工作内容管理工具:2024年7大精选

爱吃小舅的鱼

任务管理 任务管理软件 任务管理工具 工作内容管理工具

如何找到最适合你的项目工时跟踪工具

爱吃小舅的鱼

工时管理 工时管理系统

如数据血缘探究数据管理的“自治理”

Aloudata

Data 数据管理 数据血缘 Data Fabric

天工一刻 | 一文看懂3D大模型

新消费日报

大咖公开课 | 大模型场景讲解以及测试方法

霍格沃兹测试开发学社

你知道程序员再过几年会没落?

高端章鱼哥

如何在 SpringBoot 中优雅的做参数校验?

快乐非自愿限量之名

Java Spring Boot 后端

汽车辐射大?技术来救它:整车辐射抗扰发射天线仿真建模及性能预测

Altair RapidMiner

人工智能 汽车 仿真 altair 辐射

一文剖析高可用向量数据库的本质

Zilliz

人工智能 大数据 AI Zilliz 向量数据库

澳鹏Appen入选大模型产业链基础层图谱及案例研究

澳鹏Appen

大模型训练 大模型 百模大战

管理能力达到国际认可水平 智谱获得国内首批ISO/IEC 42001:2023人工智能管理体系认证证书

技术研究院

用Python来DIY一个AI面部情绪识别API的简单方案

幂简集成

API

AWS 弹性伸缩特性介绍

AutoMQ

云计算 kafka 云原生 AWS

写报告 进图谱 做演讲,可信数据库大会上亚信科技AntDB可太忙了

亚信AntDB数据库

性能提升20%,字节跳动HTTPDNS从中心下沉到边缘

火山引擎边缘云

边缘计算 HTTP DNS #DNS 边缘计算平台

《饿殍:明末千里行》PC+手机版分享,高达97%的好评率。

你的猪会飞吗

单机游戏

项目管理优化:7款顶级多项目软件解析

爱吃小舅的鱼

项目进度管理 项目进度管理软件 项目进度管理工具

火山引擎VeDI数据技术分享:两个步骤,为Parquet降本提效

字节跳动数据平台

云服务 数据平台 火山引擎 数据飞轮

HAProxy 可观测性最佳实践

观测云

HAProxy

全面解析:抖音商品列表数据接口的使用与集成技巧

tbapi

抖音 抖音商品列表数据接口 抖音商品列表数据采集 抖音API接口

如何借助逻辑数据编织平台实现“数据优先堆栈( DFS )”

Aloudata

数据仓库 数据虚拟化 数据编织

从焦虑症到AI「网红」:这名程序员是如何让AI「助他一臂之力」

新程序员编辑部

ChatGPT Prompt

待办事项软件选择指南:挑选你的效率助手

爱吃小舅的鱼

待办事项

精选顶级工时管理平台:你的最佳选择

爱吃小舅的鱼

工时管理 工时管理系统

JPA框架比较_Java_James Kao_InfoQ精选文章