Я пытаюсь создать спецификацию JPA, которая выполняет поиск в списке по списку json
@Override
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder builder) {
Expression<String> unitsNames = builder.function("json_array_elements", String.class,
root.<String>get("unitsNames"));
return builder.function("json_extract_path_text", String.class,
unitsNames, builder.literal("en"))
.in(this.unitsNames);
}
Я получил исключение:
Internal Exception: org.postgresql.util.PSQLException:
ERROR: set-returning functions are not allowed in WHERE
Массив Json должен быть похож на
[{"en":"D1","ar":"D1"},{"en":"D2","ar":"D2"}]
и UnitArray:
D1 , D2
, когда пытаетесь использовать его как sql, он работает как
SELECT *
FROM TABLENAME
inner join json_array_elements(unitNames) data
on ((json_extract_path_text(data, 'en')) in ('D1'));
, и это прекрасно работает, но я не знаю, как использовать псевдоним вAPI критериев postgres