带有表达式的 JPA CriteriaBuilder 子字符串

JPA CriteriaBuilder substring with Expression

我有一个 CriteriaBuilder,我试图在其中获取从 1 到 (LengthOfString - 5) 的字符。但是我无法获得所需的输出。下面是我想要的输出。

select
            *
        from tbl_job job1_     

        inner join
            tbl_customer customer2_ 
                on job1_.customer_id=customer2_.id 
        where
            job1_.customer_id=customer2_.id 
                    and //

        group by SUBSTRING(job1_.code,1,(LENGTH(job1_.code)-5))

我也尝试过这种方式,但是我的IDE描述了(cb.length(root.get("code"))下的错误- 5)"The operator - is undefined for the argument type(s) Expression, int".

final Specification<Job> specification = (root, query, cb) -> {
            query.orderBy(cb.asc(root.get("code"))); 
            query.groupBy(cb.substring(root.get("code"), 1 , (cb.length(root.get("code"))-5) ));
            return cb.and(
                    //...
        };

这可能是什么原因? 感谢您的帮助。

尝试检查 cb.length(root.get("code"))-5 的操作数类型。 左边是 Expression,右边是 int。没有运算符 - 处理那个。

您必须在表达式中包含计算 -5

创建一个 Expression<Integer> 保存减法的结果并在 substring 方法中使用它:

Expression<Integer> lengthMinus5 = cb.sum(cb.length(root.get("code")), -5);
Expression<Integer> one = cb.literal(1);
query.groupBy(cb.substring(root.get("code"), one , lengthMinus5 ));