带有表达式的 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 ));
我有一个 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 ));