Eu criei uma NamedQuery que se parece com isso:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
O que eu quero fazer é preencher o parâmetro: inclList com uma lista de itens em vez de um item. Por exemplo, se eu tiver um, new List<String>() { "a", "b", "c" }
como faço para obtê-lo no parâmetro: inclList? Apenas me permite codificar uma string. Por exemplo:
setParameter("inclList", "a") // works
setParameter("inclList", "a, b") // does not work
setParameter("inclList", "'a', 'b'") // does not work
setParameter("inclList", list) // throws an exception
Eu sei que eu poderia criar uma string e criar toda a consulta a partir disso, mas queria evitar a sobrecarga. Existe um jeito melhor de fazer isso?
Pergunta relacionada: se a Lista for muito grande, existe alguma maneira de criar consultas como essa?
Respostas:
Ao usar
IN
com um parâmetro com valor de coleção, você não precisa de(...)
:fonte
O formato de consulta JPA adequado seria:
Se você estiver usando uma versão mais antiga do Hibernate como seu provedor, precisará escrever:
mas isso é um bug ( HHH-5126 ) (EDIT: que foi resolvido até agora).
fonte
Funciona para mim com o JPA 2, Jboss 7.0.2
fonte
Você deve converter para
List
como mostrado abaixo:fonte