В зависимости от вашей базы данных / провайдера / драйвера / и т. Д. Вы можете фактически передать список в качестве связанного параметра в собственный запрос JPA.
Например, с Postgres и EclipseLink, следующие работы (возвращающие true), демонстрирующие многомерные массивы и как получить массив двойной точности. (Выполните SELECT pg_type.* FROM pg_catalog.pg_type
для других типов; возможно, с _
, но удалите его перед использованием.)
Array test = entityManager.unwrap(Connection.class).createArrayOf("float8", new Double[][] { { 1.0, 2.5 }, { 4.1, 5.0 } });
Object result = entityManager.createNativeQuery("SELECT ARRAY[[CAST(1.0 as double precision), 2.5],[4.1, 5.0]] = ?").setParameter(1, test).getSingleResult();
Есть приведение, поэтому буквенный массив состоит из двойных, а не числовых.
Суть вопроса - я не знаю, как и если вы можете делать именованные запросы; Я думаю, это зависит, может быть. Но я думаю, что следующий будет работать для Array.
Array list = entityManager.unwrap(Connection.class).createArrayOf("int8", arrayOfUserIds);
List<Object[]> userList = entityManager.createNativeQuery("select u.* from user u "+
"where u.user_id = ANY(?)")
.setParameter(1, list)
.getResultList();
У меня нет той же схемы, что и у OP, поэтому я не проверил это точно, но я думаю, что она должна работать - опять же, по крайней мере, на Postgres & EclipseLink.
Также ключ был найден в: http://tonaconsulting.com/postgres-and-multi-dimensions-arrays-in-jdbc/