Suponiendo que quiero escribir la siguiente consulta HQL:
FROM Cat c WHERE c.id IN (1,2,3)
¿Cuál es la forma correcta de escribir esto como una consulta parametrizada?
FROM Cat c WHERE c.id IN (?)
No estoy seguro de cómo hacer esto con el parámetro posicional, pero si puede usar parámetros con nombre en lugar de posicional, entonces el parámetro con nombre se puede colocar entre corchetes y el método setParameterList de la interfaz de consulta se puede usar para vincular la lista de valores a este parámetro.
...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...
Es posible que las versiones anteriores de Hibernate no tengan el setParameterList
método activado Query
. Aún puede recurrir setParameter("ids", listOfIds);
al anterior para obtener el mismo efecto.
IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))
estaba pasando. Llamé ensetParameter
lugar desetParameterList
. DOH!Los parámetros nombrados son mejores que los parámetros posicionales, debemos tener cuidado al mirar el orden / posición, mientras que nombrar es fácil.
Llamado:
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);
fuente