写点什么

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

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

关注

评论

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

Pencils Protocol Season 3 现已开启,一鱼多吃最大化收益

石头财经

Moonchain 随柏林市长访问东京,并与三菱和富士通等建立合作预期

股市老人

全新品牌升级的 Pencils Protocl,如何构建 LRT 赛道新范式?

股市老人

Python实现大麦网抢票的四大关键技术点解析

我再BUG界嘎嘎乱杀

Python 编程 后端 软件开发 抢票

全新品牌升级的 Pencils Protocl,构建 LRT 赛道新范式

西柚子

Logstash 业务日志接入可观测最佳实践

观测云

Logstash

一文读懂Pencils Protocol Season 3:多重收益实现一鱼多吃

大瞿科技

你不可不知的开源组织详解,这里都有!

Apache IoTDB

一文读懂Pencils Protocol Season 3:多重收益实现一鱼多吃

加密眼界

阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】

申公豹

阿里云

Pencils Protocl全新品牌升级,如何构建 LRT 赛道新范式?

BlockChain先知

基于 Milvus + LlamaIndex 实现高级 RAG

Zilliz

Milvus Zilliz llamaindex rag

智谱AI、OpenAI、谷歌等16家顶级AI公司签署前沿人工智能安全承诺

技术研究院

2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums。 每个数组的代价是指该数组中的第一个元素的值。 你的目标是将这个数组划分为三个连续且互不重叠的子数组。 然后,计算这三个子数

福大大架构师每日一题

福大大架构师每日一题

Pencils Protocl全新品牌升级,如何构建 LRT 赛道新范式?

股市老人

全新品牌升级的 Pencils Protocl,构建 LRT 赛道新范式

加密眼界

用python优雅实现:序列A依照序列B排序

我再BUG界嘎嘎乱杀

Python 编程 后端 软件开发

新品牌升级的 Pencils Protocl,如何构建 LRT 赛道新范式?

石头财经

2024 年 5 个 GO REST API 框架

幂简集成

Go REST API

Node下调试better-sqlite3

麦兜

Pencils Protocol Season 3 现已开启,多重收益一览

BlockChain先知

信通院《智能化数据管理工具能力要求》标准发布,Aloudata 受邀参编!

Aloudata

DataOps 数据管理

Pencils Protocol Season 3 现已开启,多重收益一览

股市老人

伍继智能:基于 EMQX Cloud 实现智慧电力运维平台

EMQ映云科技

Python Web Service开发及优化

我再BUG界嘎嘎乱杀

Python nginx flask web服务

Pencils Protocol Season 3 现已开启,一鱼多吃最大化收益

股市老人

一文读懂Pencils Protocol Season 3:多重收益实现一鱼多吃

西柚子

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