JPA CriteriaBuilder подстрока с выражением - PullRequest
0 голосов
/ 01 октября 2018

У меня есть 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)"Оператор- не определено для типа аргумента (ов). Выражение, 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(
                    //...
        };

Может ли это быть причиной?Спасибо за любую помощь заранее.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Создайте 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 ));
0 голосов
/ 01 октября 2018

Попробуйте проверить типы операндов cb.length(root.get("code"))-5.Левая сторона Expression, правая сторона int.Оператор - для этого не обрабатывается.

Вы должны включить в выражение вычисление -5.

...