He creado una NamedQuery que se ve así:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
Lo que quiero hacer es completar el parámetro: inclList con una lista de elementos en lugar de un elemento. Por ejemplo, si tengo un new List<String>() { "a", "b", "c" }
¿cómo lo consigo en el parámetro: inclList? Solo me permite codificar una cadena. Por ejemplo:
setParameter("inclList", "a") // works
setParameter("inclList", "a, b") // does not work
setParameter("inclList", "'a', 'b'") // does not work
setParameter("inclList", list) // throws an exception
Sé que podría simplemente construir una cadena y construir la consulta completa a partir de eso, pero quería evitar la sobrecarga. ¿Existe una forma mejor de hacer esto?
Pregunta relacionada: si la lista es muy grande, ¿hay alguna buena forma de crear consultas como esa?
Respuestas:
Cuando se usa
IN
con un parámetro con valor de colección, no necesita(...)
:fuente
El formato de consulta JPA adecuado sería:
Si está utilizando una versión anterior de Hibernate como proveedor, debe escribir:
pero eso es un error ( HHH-5126 ) (EDITAR: que ya se ha resuelto).
fuente
Funciona para mí con JPA 2, Jboss 7.0.2
fuente
Debe convertir a
List
como se muestra a continuación:fuente