У меня есть набор значений фильтров, которые входят в фильтры List. Они сопоставляются с varchar()[] в базе данных postgres. Я пытаюсь создать org.springframework.data.jpa.domain.Specification, который можно использовать для поиска в требуемом столбце.
Есть ли способ создать такую спецификацию, которая будет работать?
Нерабочий фрагмент кода прилагается
Код: Выделить всё
private Specification hasFilters(
List filters) {
return (root, query, cb) -> {
Predicate filterPredicate = cb.disjunction();
if (!CollectionUtils.isEmpty(filters)) {
for (String filter : filters) {
filterPredicate = cb.isNotNull(
cb.function("array_position", Integer.class, root.get("columnName"),
cb.literal(filter))
);
}
}
return filterPredicate;
};
}
Идея состоит в том, чтобы использовать функцию postgres
'array_position' для поиска строк внутри массива и проверки наличия у них позиции в массиве. И если значение имеет позицию, я бы сопоставил его с
cb.isNotNull. Но в итоге это просто не работает, возвращаемые значения не фильтруются. Любые идеи и предложения будут очень полезны.
Подробнее здесь:
https://stackoverflow.com/questions/791 ... es-varchar