Использование предложения IN в собственном SQL-запросе
-
06-07-2019 - |
Вопрос
Мы пытаемся динамически сгенерировать предложение IN для собственного SQL-запроса, возвращающего сущность JPA. Hibernate является нашим провайдером JPA. Наш код выглядит примерно так.
@NamedQuery(
name="fooQuery",
queryString="select f from Foo f where f.status in (?1)"
)
....
Query q = entityManager.createNamedQuery("fooQuery");
q.setParameter(1, "('NEW','OLD')");
return q.getResultList();
Это не работает, предложение in не распознает ни одно из значений, переданных таким образом. Кто-нибудь знает решение этой проблемы?
Решение
JPA поддерживает именованные параметры списка, в вашем случае:
@NamedQuery(
name="fooQuery",
queryString="select f from Foo f where f.status in (?1)"
)
Query q = entityManager.createNamedQuery("fooQuery");
List<String> listParameter = new ArrayList<>();
listParameter.add("NEW");
listParameter.add("OLD");
q.setParameter(1, listParameter);
return q.getResultList();
Другие советы
Я бы рекомендовал не использовать составной параметр для вашего запроса, а выделять его по отдельности. Не указывайте ('NEW', 'OLD')
; укажите отдельные параметры 'NEW'
и 'OLD'
. Это может помочь.
Это, конечно, может вызвать проблемы, если длина вашего параметра не определена.
Не связан с StackOverflow