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 (?)
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 (?)
Respuestas:
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);
...
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);
IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))
estaba pasando. Llamé ensetParameter
lugar desetParameterList
. DOH!