Spring Boot 3迁移:Hibernate 6中如何替代OrderImpl?
Hibernate 6.1.7(Spring Boot 3.0.5)中OrderImpl不存在的替代方案
在Spring Boot 3.0.5配套的Hibernate 6.1.7.Final版本里,org.hibernate.query.criteria.internal.OrderImpl已被移除,自定义实现该类会触发如下类型转换错误:
error: "(...).OrderImpl cannot be cast to class org.hibernate.query.sqm.tree.select.SqmSortSpecification"
这是因为Hibernate 6的Criteria API底层基于SQM(语义查询模型)重构,排序逻辑需要实现SqmSortSpecification接口,自定义实现无法适配底层的SQM结构。
无需自行实现,官方提供了标准替代方案:
直接使用CriteriaBuilder的asc()和desc()方法来创建排序规则,替代原有的new OrderImpl(expression, isAscending)写法:
原代码:
new OrderImpl(expression, isAscending);
替换为:
isAscending ? criteriaBuilder.asc(expression) : criteriaBuilder.desc(expression);
该方案返回的对象是Hibernate 6原生的SqmSortSpecification实现类,完全适配底层逻辑,不会出现类型转换问题,且符合JPA Criteria API的标准用法。
内容的提问来源于stack exchange,提问作者Riberto Junior
相关产品推荐
相关产品推荐

