JPA критерий запроса, как «заданная строка», как столбец +% - PullRequest
1 голос
/ 09 марта 2020

Создание запроса / предиката, в котором содержимое столбца (в моем случае набор строк) начинается с заданной строки, очень просто:

public static <E> Predicate stringBeginsWithAnyInSet(String match, SetAttribute<E, String> setAttribute,
        CriteriaBuilder criteriaBuilder, Root<E> root) {
    SetJoin<E, String> setJoin = root.join(setAttribute);

    return criteriaBuilder.like(setJoin, match + "%");
}

, но мне нужно наоборот заданная строка должна начинаться со значения в столбце - в моем случае с хотя бы одним значением.

Проблема

criteriaBuilder.like( match + "%", setJoin);

не компилируется.

Как выполнить запрос и не изменять подпись предиката - данная строка известна, и предикат должен содержать ее.

1 Ответ

1 голос
/ 10 марта 2020

Вы писали:

данная строка должна начинаться со значения в столбце

Так что, если я хорошо понимаю, вы хотите что-то подобное (Позвольте мне объяснить это на таблица users с колонкой email)

select u.email as col_0_0_
from users u where 'given_email' like concat(u.email, '%');

При переводе в JPA CriteriaQuery имеем:

criteriaBuilder.like(builder.literal("given_email"), builder.concat(user.get(User_.email), "%"))
...