2009-06-07 12 views

Respuesta

118

estoy seguro de cómo hacer esto con parámetro de posición, pero si se puede utilizar parámetros con nombre en lugar de posicional parámetro, llamado se puede colocar dentro de los paréntesis y setParameterList método de Query interfaz se puede utilizar para obligar a la lista de valores a este parámetro.

... 
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)"); 
query.setParameterList("ids", listOfIds); 
... 
10

Las versiones anteriores de Hibernate pueden no tener el método setParameterList en Query. Todavía puede llamar al setParameter("ids", listOfIds); en el anterior para obtener el mismo efecto.

+5

¿Por qué ha sido esto cambiado de todos modos? Acabo de pasar una hora averiguando por qué 'IllegalArgumentException en la clase: org.ase.mip.persistence.entities.BaseEntityImpl, getter método de propiedad: id (BasicPropertyAccessor.java:186))' estaba sucediendo. Llamé a 'setParameter' en lugar de' setParameterList'. DOH! – opncow

-3

Los parámetros con nombre son mejores que los parámetros posicionales, debemos tener cuidado al mirar el orden/posición, mientras que el nombre es fácil.

designada:

Query query = session.createQuery("select count(*) from User"+" where userName=:userName and passWord=:passWord"); 
     query.setString("userName", userName); 
     query.setString("passWord", passWord); 

posicional:

Query query=em.createQuery("SELECT e FROM Employee e WHERE e.empId = ? and e.empDepartment = ?"); 
query.setParameter(1, employeId); 
query.setParameter(2, empDepartment); 
+2

Totalmente de acuerdo, pero eso no responde mi pregunta sobre las consultas IN (...) –

Cuestiones relacionadas