写点什么

JPA 2.0 的两个类型安全标准 API 提议

  • 2009-01-30
  • 本文字数:950 字

    阅读完需:约 3 分钟

两年前作为 Java EE 5 的一部分引入的 Java Persistence API 为对象关系映射提供了一个 POJO 持久化模型。它作为 JSR-220 的一部分由 EJB 3.0 软件专家组进行开发。

Persistence 包含三个方面的内容:

  1. API,定义在 javax.persistence 包内。
  2. Java Persistence Query Language(JPQL)。
  3. 对象 / 关系元数据。

尽管 JPQL 使得持久 Java 对象得到了显著地改善,但 JPQL 仍然被描述为字符串。这样在查询操作强类型的 Java 对象的同时,它们自己却是弱类型的。用这种方式构建查询很容易出错,而且需要支持校验、自动补全和重构的特定 IDE。

在 JSR-317 规范下开发的 JPA 2.0 被包含在 Java EE 6 中,其目的是通过引入能够提供基于非字符串构建查询的新标准 API 来解决这一问题。专家组领导 Linda DeMichiel 已经发表了一篇博文描述了目前的 API 草案:

“简单说,QueryDefinition 对象可以被想成一组相当于查询语义结构的节点: - 领域(Domain)对象,相当于范围(range)变量和其它 JPQL FROM 子句的标识符变量

  • Where 子句谓词,包含一个或多个条件表达式对象
  • Select 子句,包含一个或多个‘select 条目’对象
  • Order-by 和 group-by 条目
  • 子查询(Subqueries)

等等……”

尽管该提议事实上是在现有 JPA 机制上前进了一大步,仍有许多人——这其中包括 Gavin King,认为类型安全本可以也应该得到进一步改进。King 的 Hibernate O/R 工具是使用类型安全标准 API 的先驱,并对 EJB3 产生了重大影响,他已经向专家组提交了自己的建议。他的建议利用了 Java 6 中引入的 javax.annotation.Processor,以允许编译器插件为每个应用程序中的持久类构建元模型(metamodel)类型。King 已经在两篇博文(第一篇第二篇)中描述了他的方法的更多细节,以及他和他的团队目前正在开发的与 javac 一起使用的原型注解处理器。

专家组正在认真地考虑 King 的提议,并考虑用它替换当前的审查草稿。DeMichiel 告诉我们说:

“讨论主要集中在确保该 API 给开发者带来更好的开发体验上,静态查询(类型安全方面应当比较好)和动态查询都应如此”。我们也在考虑该元模型(metamodel)生成方面的问题。”

她补充说专家组非常渴望从开发社区听到任何反馈。请在 sun.com 上的 jsr-317-pdr-feedback 留下您的任何反馈评论。

查看英文原文: Two Type-Safe Criteria API Proposals for JPA 2.0

2009-01-30 08:421366
用户头像

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

关注

评论

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

Python量化数据仓库搭建系列1:数据库安装与操作

恒生LIGHT云社区

量化投资

DOM操作造成的页面卡顿问题及解决

CRMEB

【混合云小知识】混合云四种形式简单说明

行云管家

云计算 公有云 私有云 混合云 云管理

想一个问题,在高并发中,如何部署奇数个节点?

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

熵简技术谈 | 熵简科技在资管数据中台的探索与实践

熵简科技

数据挖掘 数据库 大数据 数据中台 数据分析

​Qt全球峰会2021中国站深入解读最新Qt 6.2长周期版本,助力企业数字化转型

教你用SQL进行数据分析

华为云开发者联盟

Python sql 数据分析 数据 BI 分析工具

如何提高C# StringBuilder的性能

编程宝库

鱼龙混杂的低代码市场,企业选型需关注哪些重点?

优秀

低代码 企业数字化转型

指令重排序导致的可见性问题

博文视点Broadview

技术分享| 如何使用FFmpeg命令处理音视频

anyRTC开发者

音视频 WebRTC ffmpeg 视频通话

如何定义SpringBoot项目配置文件中密码的加密

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

Python爬虫采集,中介网互联网网站排行榜, 样本数量:58341

梦想橡皮擦

11月日更

一文读懂Hive数据存储格式

五分钟学大数据

11月日更

请说说RPC的一个请求的流程是怎么样的?

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

动态模型之动态增减【FunTester测试框架】

FunTester

性能测试 接口测试 测试框架 FunTester 动态模型

武林大会之国产数据库风云榜-2021年11月

墨天轮

数据库 opengauss oceanbase 国产数据库

一周信创舆情观察(11.8~11.14)

统小信uos

元数据管理在数据仓库的实践应用

大数据技术指南

11月日更

SpringBoot+WebSocket实时监控异常

热爱java的分享家

Java spring 架构 程序人生 编程语言

一文让你彻底搞懂Spring状态及原理,实现订单与物流解耦

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

ApplePay应用内购(inapp)支付流程图

try catch

支付 applepay 苹果支付

uniapp+若依 开发租房小程序

詹Sir

大前端

【高并发】从源码角度深度解析线程池是如何实现优雅退出的

冰河

Java 并发编程 多线程 高并发 异步编程

SCTL 涅槃重生:投入 RAL 的怀抱

SphereEx

Java 数据库 大前端 ShardingSphere SCTL

AI界的革命!终于可以自动标注了!

百度大脑

人工智能 百度

flutter 开发中 vscode 插件推荐 2

坚果

flutter vscode 11月日更

【等保】等保3.0是什么意思?有等保3.0吗?

行云管家

网络安全 等保 等级保护 等保2.0

更改Apollo数据库为oracle

小鲍侃java

11月日更

.NET6 引入Autofac

面向对象的猫

.net6 快速上手.net6

JPA 2.0的两个类型安全标准API提议_Java_Charles Humble_InfoQ精选文章