Использование предложения IN в собственном SQL-запросе

StackOverflow https://stackoverflow.com/questions/831990

Вопрос

Мы пытаемся динамически сгенерировать предложение 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' . Это может помочь.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top