Agregar lista de cláusulas IN a una consulta JPA

He creado un 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: listaInc con una lista de elementos en lugar de un elemento. Por ejemplo, si tengo una new List() { "a", "b", "c" } ¿cómo la obtengo en el parámetro: includeList? 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 toda la Query a partir de eso, pero quería evitar la sobrecarga. ¿Hay una mejor manera de hacer esto?

Pregunta relacionada: si la Lista es muy grande, ¿hay alguna forma de construir consultas así?

Al usar IN con un parámetro de valor de colección, no necesita (...) :

 @NamedQuery(name = "EventLog.viewDatesInclude", query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND " + "el.timeMark <= :dateTo AND " + "el.name IN :inclList") 

El formato adecuado de consulta JPA sería:

 el.name IN :inclList 

Si está utilizando una versión anterior de Hibernate como proveedor, debe escribir:

 el.name IN (:inclList) 

pero eso es un error ( HHH-5126 ) (EDIT: que se ha resuelto por ahora).

 public List getDealInfos(List dealIds) { String queryStr = "SELECT NEW com.admin.entity.DealInfo(deal.url, deal.url, deal.url, deal.url, deal.price, deal.value) " + "FROM Deal AS deal where deal.id in :inclList"; TypedQuery query = em.createQuery(queryStr, DealInfo.class); query.setParameter("inclList", dealIds); return query.getResultList(); } 

Funciona para mí con JPA 2, Jboss 7.0.2

Debe convertir a la List como se muestra a continuación:

  String[] valores = hierarquia.split("."); List lista = Arrays.asList(valores); String jpqlQuery = "SELECT a " + "FROM AcessoScr a " + "WHERE a.scr IN :param "; Query query = getEntityManager().createQuery(jpqlQuery, AcessoScr.class); query.setParameter("param", lista); List acessos = query.getResultList();