9折倒计时一周! QCon 全球软件开发大会·上海站讲师上线95% >>> 了解详情
写点什么

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

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

关注

评论

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

区块链溯源解决方案----产品实现全程追溯

13530558032

简历造假的CEO和工作不满60天的CTO| 法庭上的CTO(28)

赵新龙

CTO 法庭上的CTO

架构师训练营第一期大作业

Leo乐

架构师训练营第 1 期

架构师训练营 大作业1

FG佳

面试又不会JVM?阿里P8总结出25道JVM面试解析(基础+进阶+实战)

Java架构之路

Java 程序员 架构 面试 编程语言

公司上市失败,投资方险被CEO和CTO坑 | 法庭上的CTO(27)

赵新龙

CTO 法庭上的CTO

人工智能开始改变生活方式,区块链在人工智能时代的作用

CECBC

区块链

区块链技术在智慧城市领域有五大应用价值

CECBC

区块链

Python进阶之Monad

正向成长

Python Monad

从田间到餐桌,5G、IoT、AI如何催生智慧农业?

脑极体

Week11作业

lggl

架构师训练营第一期思维导图

Leo乐

架构师训练营第 1 期

架构训练营第十三周作业

Geek_ce484f

架构师训练营第 1 期

大作业一

架构师训练营第 1 期

第一周 ARTS打卡

Aelous

智慧社区安防系统解决方案,智慧社区建设

13530558032

侵犯老东家“专利权”的技术总监 | 法庭上的CTO(26)

赵新龙

CTO 法庭上的CTO

SSM框架进阶笔记,阿里达摩院分享必是精品

Java架构师迁哥

我花费一年的时间明白大厂面试的残酷!也最终拿到蚂蚁金服offer,定级P7职位。

Java架构之路

Java 程序员 架构 面试 编程语言

再见,2020

Rayjun

年终总结

介绍一个新库: Norns.Urd.HttpClient

八苦-瞿昙

C# HTTP aop

架构师训练营 4 期 第一周

引花眠

架构师训练营 4 期

架构训练营大作业

Geek_ce484f

架构师训练营第 1 期

2021年最新Github星标73.7K的性能优化PDF也太完美了

Java架构追梦

Java 学习 架构 面试 性能优化

week6-conclusion

J

week10-

未来已来

week10-根据当周学习情况,完成一篇学习总结

未来已来

week6-homework

J

论区块链技术与数字货币的发展

CECBC

数字货币 区块链技术

架构2期 - 第十一周作业(1)

浮生一梦

2组 第十一周作业

架构训练营大作业2

Geek_ce484f

架构师训练营第 1 期

  • 扫码添加小助手
    领取最新资料包
Pratik Patel谈企业JPA、Fetch Groups及Spring 2.5_Java_Srini Penchikala_InfoQ精选文章