Blaze-Persistence:给 JPA 加一层本该有的查询能力 文章目录Blaze-Persistence给 JPA 加一层本该有的查询能力1、 它要解决的问题2、 核心能力3、 Entity View 模块4、 怎么用5、 兼容性6、 适合哪些人Blaze-Persistence给 JPA 加一层本该有的查询能力Blaze-Persistence 在 GitHub 上拿到了 855 Star。它做的事很专一给 JPA 提供一套更厚的 Criteria API把用 JPA 时碰到的一堆限制补回来。CTE、递归查询、UNION、RETURNING、键集分页这些原生 JPA 不支持的东西它能写。1、 它要解决的问题用 JPA 写过复杂查询的人大概都清楚。NamedQuery 写死了 SQL JPQL 表达能力有限标准 Criteria API 啰嗦还容易写错遇到分页深翻就性能崩盘。多投一投少用一些 SELECT本来数据库一行 SQL 解决的事要么拆成多次查询在内存里拼要么直接绕开 ORM 写原生 SQL。Blaze-Persistence 把这层补上了。它不是替代 JPA 的 ORM是架在 JPA 之上的一套查询构造器底层还是走 Hibernate、EclipseLink、DataNucleus 这些 provider。开发者用它的 fluent API 写查询它翻译成对应 provider 能跑的 SQL。2、 核心能力能做的事大致这么几类:普通 JPA 写不出来的 SQL 特性它给做成了 API。CTE 和递归 CTE 可以定义临时结果集DML CTE 可以在 CTE 里做修改操作。RETURNING 子句让 INSERT/UPDATE/DELETE 后直接拿到改动后的数据省一次回查。UNION、EXCEPT、INTERSECT 这些集合操作能拼出多结果合并的查询以前得绕好几道弯。VALUES 子句可以做报表查询group_concat、日期截取、日期运算这些函数它内置了一堆跨 provider 表现一致。键集分页解决了深翻页的性能问题传统 OFFSET 翻得越深越慢键集用上一页最后一行的键定位翻多深都稳定。3、 Entity View 模块这个模块单独说一句。它的思路类似数据库的视图但作用在 JPA 实体上。实际项目里 DTO 是绕不开的东西。直接查实体出来一堆懒加载和 N1手写 DTO 又要维护投影逻辑。Entity View 让你写一个接口描述要哪些字段框架自动生成 JOIN 和投影 SQL。写法上像这样EntityView(Cat.class)publicinterfaceCatView{IdMappingIntegergetId();Mapping(CONCAT(mother.name, s kitty , name))StringgetCuteName();SimpleCatViewgetFather();}cuteName是计算字段JPQL 表达式直接给。father关联自动 LEFT JOIN 出来。查询时把 view 应用到 CriteriaBuilder 上拿到结果前只取了需要的那几列不发多余的 SQL。4、 怎么用Maven 引入给一个版本属性就够了模块都按这个版本一起发布propertiesblaze-persistence.version1.6.18/blaze-persistence.version/properties入口是CriteriaBuilderFactory和EntityManagerFactory同生命周期CriteriaBuilderConfigurationconfigCriteria.getDefault();CriteriaBuilderFactorycbfconfig.createCriteriaBuilderFactory(entityManagerFactory);写一个查询把关联一起 fetch 进来一行就能完事cbf.create(em,Cat.class).fetch(kittens.father).getResultList();底层生成的 SQL 是带两个 LEFT JOIN FETCH 的语句路径写错了会基于 metamodel 提前报错不用等到运行时。5、 兼容性支持的版本跨度很宽。Hibernate 从 4.2 一路到 7.1EclipseLink 2.6Spring 4.3Spring Data 1.11 到 3.5Quarkus 1.4。最低只要 JPA 2.0能塞进 Java EE 6 或 Spring 4 的老项目。Java 运行时方面能跑在 Java 7 上最新测到 Java 21。Spring Boot、DeltaSpike Data、JAX-RS、GraphQL、Jackson 这些都有现成集成模块要接进去基本不用自己写胶水代码。6、 适合哪些人觉得 JPA Criteria 啰嗦难维护、又不想退回原生 SQL 的团队查询里有 UNION、CTE、深分页原生 JPA 写不出来只能换方案的人DTO 投影逻辑散得到处都是、想统一管理前端返回结构的项目老项目里 Hibernate 4.x 还在跑、想升级查询能力但不能动 ORM 的开发者如果想试水作者提供了 Maven archetypecore、entity-view、spring-data、spring-boot、quarkus 各种集成模板都有一条命令生成完整可跑的工程自己改着试就行。etypecore、entity-view、spring-data、spring-boot、quarkus 各种集成模板都有一条命令生成完整可跑的工程自己改着试就行。

相关新闻

最新新闻

终极指南:使用image2cpp将图像转换为Arduino字节数组的完整教程

终极指南:使用image2cpp将图像转换为Arduino字节数组的完整教程

终极指南:使用image2cpp将图像转换为Arduino字节数组的完整教程 【免费下载链接】image2cpp 项目地址: https://gitcode.com/gh_mirrors/im/image2cpp 想要在Arduino或树莓派项目中使用自定义图像显示吗?image2cpp图像转换工具是你的完美解决方案…

2026/7/8 12:24:44
STM32与BMI160 IMU传感器开发实战指南

STM32与BMI160 IMU传感器开发实战指南

1. 项目背景与硬件选型解析在嵌入式系统开发中,精确获取运动数据是许多应用的基础需求。我最近完成的一个无人机飞控项目就面临这样的挑战——需要实时采集飞行器的加速度和角速度数据。经过多轮对比测试,最终选择了Bosch Sensortec的BMI160惯性测量单元…

2026/7/8 12:24:44
STM32F302R8与BMI323运动传感器开发指南

STM32F302R8与BMI323运动传感器开发指南

1. 项目概述:当BMI323遇上STM32F302R8 在嵌入式开发领域,运动感知能力正成为各类智能设备的标配。Bosch Sensortec推出的BMI323作为一款高性能6自由度惯性测量单元(6DoF IMU),集成了三轴加速度计、三轴陀螺仪和温度传感器,通过SPI…

2026/7/8 12:24:44
深度掌控Windows Defender:开源管理工具的技术原理与实战指南

深度掌控Windows Defender:开源管理工具的技术原理与实战指南

深度掌控Windows Defender:开源管理工具的技术原理与实战指南 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://gitcode.com/gh_mirrors/de/defender-control…

2026/7/8 12:24:44
NAU8224与PIC18F45K80音频系统设计与优化

NAU8224与PIC18F45K80音频系统设计与优化

1. 为什么选择NAU8224与PIC18F45K80组合在音频系统设计中,NAU8224作为一款高效Class-D音频放大器,与PIC18F45K80微控制器的组合能够提供专业级的音频处理能力。NAU8224采用先进的PWM调制技术,总谐波失真(THDN)低至0.03%,信噪比达到…

2026/7/8 12:24:44
6DOF IMU运动数据采集系统设计与优化

6DOF IMU运动数据采集系统设计与优化

1. 项目背景与硬件选型解析在运动数据采集领域,6自由度惯性测量单元(6DOF IMU)因其能够同时检测线性加速度和角速度的特性,成为姿态识别、运动追踪等应用的核心器件。本次项目采用Bosch BMI160传感器与Microchip PIC32MX695F512L微控制器的组合方案&…

2026/7/8 12:19:43

月新闻