发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

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

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

关注

评论

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

Android技术类校招面试题汇总:扔物线rxJava

android 程序员 移动开发

android热更新图片,动脑学院视频百度云

android 程序员 移动开发

Android快速转战Kotlin教程,安卓已死

android 程序员 移动开发

Android技术类校招面试题汇总:android享学课堂vip课程下载

android 程序员 移动开发

Android插件化入门指南,程序员必看

android 程序员 移动开发

android插件化和热修复区别,扔物线学堂

android 程序员 移动开发

架构实战-模块一

唐敏

架构实战营

android插件化开发指南,享学课堂课程怎么样

android 程序员 移动开发

Android攒了一个月的面试题及解答,Android程序员必会

android 程序员 移动开发

Android最牛教材!kotlin入门教程百度网盘

android 程序员 移动开发

Android开发面试题!动脑学院安卓教程vip2019

android 程序员 移动开发

Android性能优化推荐书,享学课堂课程怎么样

android 程序员 移动开发

Android最新实习面试经验总结,我就不信你还听不明白了

android 程序员 移动开发

卷王如何刷力扣

bigsai

数据结构 算法 刷题

Android模块化面向接口编程,快来收藏

android 程序员 移动开发

COSCon'21 参会指南 你想要的这里都有

开源社

开源社区 第六届中国开源年会 COSCon'21 开源社

android插件化资源冲突,享学课堂vip二期

android 程序员 移动开发

极光笔记丨百亿级数据的实时存取优化与实践

极光JIGUANG

高可用 软件架构 多级存储系统 高性能存储

【推荐】如何将枯燥的大数据呈现为可视化的图和动画?

云智慧AIOps社区

大数据 开源 大前端 数据可视化 大屏可视化

Android最牛教材!享学课堂Android架构师二期

android 程序员 移动开发

Android性能优化面试题集锦,架构师必备

android 程序员 移动开发

没想到!我在简历上写了“精通MySQL”,阿里面试官跟我死磕后就给我发了高薪offer

收到请回复

程序员 编程语言 后端

Android教程,享学androidvip

android 程序员 移动开发

Android热修复原理,金九银十旗开得胜

android 程序员 移动开发

Android技术类校招面试题汇总,享学课堂Android架构师课程

android 程序员 移动开发

android插件化原理,android开发视频百度网盘

android 程序员 移动开发

极客时间 - 架构实战营 - 模块一作业

秋夫人

架构实战营

Android热修复原理,跳槽字节跳动

android 程序员 移动开发

Android推送技术解析,Android开发工程师面试题

android 程序员 移动开发

Android插件化主流框架和实现原理,挑战大厂重燃激情

android 程序员 移动开发

Android框架,动脑学院android视频

android 程序员 移动开发

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