Я создал NamedQuery, который выглядит так:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
Я хочу заполнить параметр: inclList списком элементов вместо одного элемента. Например, если у меня есть, new List<String>() { "a", "b", "c" }
как мне получить это в параметре: inclList? Это позволяет мне кодировать только одну строку. Например:
setParameter("inclList", "a") // works
setParameter("inclList", "a, b") // does not work
setParameter("inclList", "'a', 'b'") // does not work
setParameter("inclList", list) // throws an exception
Я знаю, что могу просто построить строку и построить из нее весь запрос, но я хотел избежать накладных расходов. Есть ли лучший способ сделать это?
Связанный вопрос: если список очень большой, есть ли хороший способ создания такого запроса?
Ответы:
При использовании
IN
с параметром, оценивающим коллекцию, вам не нужны(...)
:источник
Правильный формат запроса JPA будет:
Если вы используете старую версию Hibernate в качестве провайдера, вам необходимо написать:
но это ошибка ( HHH-5126 ) (РЕДАКТИРОВАТЬ: которая уже решена).
источник
У меня работает с JPA 2, Jboss 7.0.2
источник
Вы должны преобразовать в,
List
как показано ниже:источник