Zakładając, że chcę napisać następującą kwerendę HQL:
FROM Cat c WHERE c.id IN (1,2,3)
jaki jest właściwy sposób zapisania tego jako sparametryzowanego zapytania, np
FROM Cat c WHERE c.id IN (?)
Nie jestem pewien, jak to zrobić z parametrem pozycyjnym, ale jeśli zamiast pozycyjnych można użyć nazwanych parametrów, to nazwany parametr można umieścić w nawiasach kwadratowych, a do powiązania listy wartości z tym parametrem można użyć metody setParameterList z interfejsu Query .
...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...
Starsze wersje Hibernate mogą nie mieć setParameterList
włączonej metody Query
. Nadal możesz zadzwonić setParameter("ids", listOfIds);
do starszego, aby uzyskać ten sam efekt.
IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))
tak się dzieje. ZadzwoniłemsetParameter
zamiastsetParameterList
. DOH!Nazwane parametry są lepsze niż parametry pozycyjne, powinniśmy uważać na kolejność / pozycję - choć nazwane jest łatwe.
O imieniu:
Query query = session.createQuery("select count(*) from User"+" where userName=:userName and passWord=:passWord"); query.setString("userName", userName); query.setString("passWord", passWord);
Pozycyjny:
Query query=em.createQuery("SELECT e FROM Employee e WHERE e.empId = ? and e.empDepartment = ?"); query.setParameter(1, employeId); query.setParameter(2, empDepartment);
źródło