AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

Flexus X实例GitLab部署&构建流水线-私人一体化代码仓库~

YG科技

Winform应用中的WebView2:打造现代桌面应用的利器

代码忍者

02.单一职责原则详解

杨充

DApp外包开发的框架

北京木奇移动技术有限公司

区块链技术 dapp开发 软件外包公司

华为云Flexus云服务器X实例之openEuler系统下部署dufs文件服务器

YG科技

实验室信息管理系统(源码+文档+部署+讲解)

深圳亥时科技

一文让你快乐理解网络安全的意义

行云管家

网络安全 等保 堡垒机 网络安全厂商

LED广告显示屏:如何吸引眼球并提升商业价值

Dylan

商业 城市 LED LED display LED显示屏

京东图片搜索商品拍立淘接口(JD.item_search_img)

tbapi

京东API接口 京东图片搜索接口 京东拍立淘接口

云服务器Flexus X实例评测体验之搭建Redis

YG科技

华为云Flexus云服务器X实例之openEuler系统下部署Web应用服务器OpenResty

YG科技

CnosDB向EMQX实时推送消息,实现端到端的数据实时流转

CnosDB

AI 物联网 时序数据库 开源社区 CnosDB

2025江西等保测评机构名单看这里!

行云管家

江西 等保 等级保护 等保测评

SQL大宝剑-已燃尽所有SQL的理解

京东科技开发者

「数据密集型应用系统设计」读后感与团队高并发高性能实践案例

京东科技开发者

云智慧ITSM:以技术创新引领行业智能化应用

云智慧AIOps社区

ITSM ITSM软件 IT服务管理 IT服务台

数据科学家成长路线图

俞凡

人工智能 算法

华为天气年度榜单出炉,带你了解2024中国城市天气情况

最新动态

华为云Flexus云服务器X实例之openEuler系统下部署OpenCart开源电子商务平台

YG科技

使用Flexus X实例搭建Dubbo-Admin服务

YG科技

DAPP项目的外包开发流程

北京木奇移动技术有限公司

区块链技术 dapp开发 软件外包公司

智能化信息追溯系统(源码+文档+部署+讲解)

深圳亥时科技

在线文档云平台(源码+文档+部署+讲解)

深圳亥时科技

营销场景中,如何让你的短信不被识别为垃圾短信

京东科技开发者

华为云Flexus云服务器X实例之openEuler系统下搭建k3s轻量级kubernetes环境

YG科技

华为云Flexus云服务器X实例之openEuler系统下打造EnBizCard个人电子名片

YG科技

部署Linux服务器运维管理面板1Panel

YG科技

当今社会婚恋交友系统对人们的影响,搭建一款婚恋交友app需要准备什么东西?

DUOKE七七

php 开源 uniapp 交友系统

有了 BI 为什么还需要指标平台

Aloudata

数据分析 BI 指标管理 指标平台 指标开发

Web3项目的外包开发流程

北京木奇移动技术有限公司

区块链技术 软件外包公司 web3开发

当下热门火爆婚恋交友系统app软件源码,陌生人社交交友系统

DUOKE七七

php uniapp 婚恋交友相亲APP小程序

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