Использование предложения IN в собственном запросе sql
Мы пытаемся динамически генерировать предложение 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 не распознает любые значения, переданные с помощью этого способа. Кто-нибудь знает о решении этой проблемы?
Ответы
Ответ 1
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();
Ответ 2
Я бы рекомендовал не использовать составной параметр для вашего запроса, а разделить его по отдельности. Не указывайте ('NEW','OLD')
; укажите отдельные параметры 'NEW'
и 'OLD'
. Это может помочь.
Это, конечно, может вызвать проблемы, если длина ваших параметров undefined.