Как использовать функции массива в запросе JPA без использования собственного запроса?JAVA

Программисты JAVA общаются здесь
Anonymous
Как использовать функции массива в запросе JPA без использования собственного запроса?

Сообщение Anonymous »

Я хочу использовать функцию array_overlaps () в запросе JPA, не прибегая к собственному запросу.
Вот мое определение @Query:

Код: Выделить всё

  @Query(value = """
SELECT view FROM FilterView view
WHERE (:selectedIds IS NULL
OR array_overlaps(view.ids, (:selectedIds)) IS true)
""")
List findAllByFilter(Collection selectedIds);
< /code>
Просмотреть определение объекта: < /p>
@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "filter_view")
public class FilterView {

@JdbcTypeCode(Types.ARRAY)
@Column(name = "ids")
private Collection ids;

// other fields
}
< /code>
Просмотреть файл sql: < /p>
DROP VIEW IF EXISTS filter_view;
CREATE VIEW filter_view AS
SELECT
ARRAY_AGG(DISTINCT p.id) AS ids,
-- other columns

FROM my_entity p
LEFT JOIN ...
GROUP BY ...
< /code>
В этой конфигурации я столкнулся с следующей ошибкой времени выполнения: < /p>
Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: bigint[] && bytea
< /code>
Ошибка предполагает, что параметр SelectedIDS рассматривается как Bytea, даже если он определяется как сбор в подписи метода, что я не до конца понимаю, почему. Это приводит к несоответствию типа. Полем Например, CAST (: SelectedIds As Collection ) 
дает ошибку компиляции.
Я также попытался обернуть параметр элементами (: selectedids) , Но это также приводит к ошибке компиляции: < /p>

Код: Выделить всё

Caused by: org.hibernate.query.sqm.produce.function.FunctionArgumentException:
Parameter 1 of function 'array_overlaps()' requires an array type
java.util.Collection, but argument is of type 'java.lang.Object'
Как я могу правильно передать коллекцию в качестве параметра массива в JPA, чтобы array_overlaps () работает без использования собственного запроса? Есть ли альтернативный способ представлять массивы в JPA, который избегает проблемы конверсии байтов?

Подробнее здесь: https://stackoverflow.com/questions/794 ... tive-query

Вернуться в «JAVA»