写点什么

Pratik Patel 谈企业 JPA、Fetch Groups 及 Spring 2.5

  • 2008-08-28
  • 本文字数:1449 字

    阅读完需:约 5 分钟

Apache OpenJPA 框架提供一些 JPA 扩张特性,比如 Fetch Groups 等,为企业 Java 开发者获取与 Java 对象所对应的数据的工作提供了更大的灵活性。Pratik Patel 阐述了如何结合 JPA 设计技术,使用 JPA API 和 Spring 2.5 框架来开发 Java 应用。在最近的 No Fluff Just Stuff(NFJS)俄亥俄州中心软件座谈会上,他就企业JP 这一话题做了一次演讲

Pratik 谈到了如何为使用 JPA API 实现持久化的 Java 应用设计多个持久化单元(persistence units,即 PU),也谈到相关的性能调优技术。他提到 EJB 3.0 Entities(正式的叫法是 Entity Beans)采用了基于“POJO 持久化”设计概念的 JPA。他说,在 Java 应用中使用供应商提供的特定扩展(比如“Fetch Groups”)来进行 JPA 开发是很有必要的。

Spring 2.5 框架与 JPA 的集成良好,可以管理多个持久化单元,也可以通过一些 JPA 配置细节(如数据源)把 persistence.xml 迁移到 Spring 配置文件中,JPA 的配置也就更加灵活。在使用 Spring 配置 JPA 把大段代码分割为小模块的时候,开发人员就可以利用扩展点。同样, Spring Test 模块对 JPA 类(如 AbstractJpaTests )的单元测试、集成测试都提供很好的支持。AbstractJpaTests 类使用了一个后台 classloader 在运行时增强类,它围绕事务来包装测试方法,同时提供帮助类来声明应用上下文。Spring JPA 模块( LocalContainerEntityManagerFactoryBean )还可以在容器外对 JPA 逻辑进行单元测试。

谈到锁(locking),Pratik 说到 JPA 规范默认使用乐观锁(optimistic locking)。当然,开发者也可以自行使用悲观锁(pessimistic locking),但他们需要使用 EntityManager 的 lock() 或者 find() 方法来定义锁管理器。JPA 以基于“版本”的方式来跟踪内存中数据的更新,只需要在持久化类上加一个 @Version 属性,同时在数据库表中添加一个 Version 列。应当尽量避免使用悲观锁,因为它会影响吞吐量,而且很难从坏锁(bad locks)中恢复。 Pratik 以 Apache OpenJPA 框架提供的 @FetchGroup @FetchPlan 注解来举例说明 JPA API 的用法和性能调优。此外,他还谈到 fetching 逻辑的单元测试和集成测试,并且建议大家对 fetch groups 代码进行测试,这对应用投入到生产环境中的过程很有保障。

关于 JPA 的最佳实践,他希望开发者能考虑使用内存数据库(如 HSQL DB )而不要再用 mock DAO 实现。虽然连接到内存数据库会多花点时间,但代码相对要少很多,开发代价也小。其它的最佳实践还包括检查生成的 SQL,这会使我们更深入了解 ORM 工具生成的 SQL 查询语句。另一件要考虑的是 DDL 的生成,因为所有的 JPA 实现都允许生成 DDL,这可以用来进行快速开发。在使用 JPA API 实现持久化时还需要考虑的其他一些事情如下:

  • 集合排序(JPA 2.0 将引入一个叫做 @OrderColumn 的新注解,定义用来比较的列)
  • 尽早且频繁地刷新缓存(Flush),同一事务中接下去的查询就不会再看到未刷新的数据
  • 枚举——数据库中速度与可读性的较量

在另一个与 JPA 相关的

演讲中,Pratik 谈到了JPA 查询语言(JPA Query Language,即JPAQL),这种语言天生具有面向对象查询的特性,而且可以批量更新和删除。JPAQL 与其他查询语言如

JDOQL

HQL 等很相似,但功能要比 HQL 少。对于 lazy 关联,FETCH JOIN 表达式可以在取得主表数据的同时将关联的信息也一并取回。他还谈到了

JPA 2.0 规范的一些新特性:

  • “Criteria”查询
  • 针对基本类型的集合(Integer 和 String)
  • 扩展的 Map 支持
  • 更多 JPAQL 表达式
  • 更好的锁支持

查看英文原文: Pratik Patel on Enterprise JPA, Fetch Groups and Spring 2.5

2008-08-28 02:47794
用户头像

发布了 88 篇内容, 共 269.1 次阅读, 收获喜欢 8 次。

关注

评论

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

基于区块链的社会治理探索

CECBC

区块链 大数据 信息技术

ARTS打卡 第14周

引花眠

微服务 ARTS 打卡计划

Ray 分布式计算框架详解

lipi

分布式 数据湖 pandas Apache Arrow

麦叔告诉你,Linux下安装nginx都踩了那些坑

麦洛

nginx Linux

图解Node(上)——直击灵魂的十条拷问

执鸢者

大前端 原理 Node

高并发系统三大利器之降级

root

SpringBoot+Tess4j实现牛逼的OCR识别工具

小隐乐乐

LeetCode 5. Longest Palindromic Substring

liu_liu

算法 LeetCode

【读书笔记一】《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》

Man

中台 阿里 中台战略

JVM的早期优化与晚期优化

Edison

JVM JVM虚拟机原理

架构师训练营第十二周作业

张明森

雪花算法把玩

ElvinYang

Docker 镜像的备份恢复迁移

哈喽沃德先生

Docker 容器 微服务 镜像

大事情!中国限制 AI 算法出口。网友:这是要阻止XX“下跪”

程序员生活志

比特币挖矿到底挖的是什么?

CECBC

比特币 区块链 数字货币

架构师训练营第十二周总结

张明森

oeasy教您玩转linux010109clear清屏

o

30年技术积累,技术流RTC如何成为视频直播领域的黑马?

华为云开发者联盟

云计算 AI 5G RTC 华为云

5G边缘计算:开源架起5G MEC生态发展新通路

华为云开发者联盟

开源 5G 边缘计算 公有云 EdgeGallery

pandas ~基础pandas

南辞

Python

软件产品的创新与宇宙奇点大爆炸

常平

方法论 产品思维 架构思维

Flink检查点、保存点及状态恢复-13

小知识点

scala 大数据 flink

面经手册 · 第8篇《LinkedList插入速度比ArrayList快?你确定吗?》

小傅哥

Java 数据结构 面试 小傅哥 linkedlist

你真的懂 Java 的 main 方法吗

Rayjun

Java

小小的分页引发的加班血案

架构师修行之路

架构

翻转链表算法、自动化测试框架robot-framework、两款iOS 在手机端debugging 工具Flex、啄木鸟、加密技术 高可用系统的度量 高可用系统的架构 高可用系统的运维 John 易筋 ARTS 打卡 Week 15

John(易筋)

ARTS 打卡计划 高可用系统的架构 翻转链表 自动化测试Robot 手机调试工具Flex

oeasy教您玩转linux010108到底哪个which

o

【持续更新~】常遗忘却可以变更好的心态

01Running

个人成长

程序的机器级表示-控制

引花眠

计算机基础

ARTS Week14

时之虫

ARTS 打卡计划

k8s-client-go源码剖析(二)

远鹏

Kubernetes 源码剖析 Go 语言

Pratik Patel谈企业JPA、Fetch Groups及Spring 2.5_Java_Srini Penchikala_InfoQ精选文章