Forma correcta de escribir un HQL en (…) consulta


80

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:


130

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);
...

11

Es posible que las versiones anteriores de Hibernate no tengan el setParameterListmétodo activado Query. Aún puede recurrir setParameter("ids", listOfIds);al anterior para obtener el mismo efecto.


5
¿Por qué se ha cambiado esto de todos modos? Pasé una hora averiguando por qué IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))estaba pasando. Llamé en setParameterlugar de setParameterList. DOH!
Opncow

-4

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);

3
Totalmente de acuerdo, pero eso no responde a mi pregunta sobre las consultas IN (...)
Robert Munteanu
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.