Использование предложения IN в собственном SQL-запросе - PullRequest
13 голосов
/ 07 мая 2009

Мы пытаемся динамически сгенерировать предложение 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 не распознает ни одно из значений, переданных этим способом. Кто-нибудь знает решение этой проблемы?

Ответы [ 2 ]

19 голосов
/ 07 мая 2009

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();
0 голосов
/ 07 мая 2009

Я бы рекомендовал не использовать составной параметр для вашего запроса, а выделять его по отдельности Не указывайте ('NEW','OLD'); укажите отдельные параметры 'NEW' и 'OLD'. Это может помочь.

Это, конечно, может вызвать проблемы, если длина вашего параметра не определена.

...