2009-06-07 10 views

Odpowiedz

118

jestem pewien jak to zrobić z pozycyjnym parametru, ale jeśli można użyć parametrów nazwanych zamiast pozycyjnych, wówczas o nazwie parametru może być umieszczony wewnątrz wsporników i setParameterList metoda z Query interfejsu mogą być stosowane do wiązania listę wartości do tego parametru.

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

Starsze wersje Hibernate nie może mieć metodę setParameterList na Query. Nadal możesz zadzwonić pod numer setParameter("ids", listOfIds); na starszy, aby uzyskać ten sam efekt.

+5

Dlaczego ta została zmieniona tak czy inaczej? Po prostu spędziłem godzinę zastanawiając się, dlaczego wystąpił wyjątek 'IllegalArgumentException w klasie: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))'. Nazwałem 'setParameter' zamiast' setParameterList'. DOH! – opncow

-3

Parametry o nazwach są lepsze niż parametry pozycyjne, powinniśmy być ostrożni przy patrzeniu na kolejność/pozycję - podczas gdy nazwa jest łatwa.

Nazwany:

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

pozycyjne:

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

W pełni się zgadzam, ale to nie odpowiada na moje pytanie dotyczące zapytań IN (...) –

Powiązane problemy