2009-06-07 30 views

Trả lời

118

Tôi không chắc chắn làm thế nào để làm điều này với tham số vị trí, nhưng nếu bạn có thể sử dụng tên thông số thay vì vị trí, thông số sau đó được đặt tên có thể được đặt bên trong dấu ngoặc và setParameterList phương pháp từ giao diện Query thể được sử dụng để ràng buộc danh sách của các giá trị cho tham số này.

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

phiên bản cũ của Hibernate có thể không có phương pháp setParameterList trên Query. Bạn vẫn có thể gọi số setParameter("ids", listOfIds); trên thẻ cũ hơn để có hiệu lực tương tự.

+5

Tại sao này được thay đổi anyways? Chỉ mất một giờ để tìm ra lý do tại sao 'IllegalArgumentException trong lớp: org.ase.mip.persistence.entities.BaseEntityImpl, phương thức getter của thuộc tính: id (BasicPropertyAccessor.java:186))' đang xảy ra. Tôi đã gọi 'setParameter' thay vì' setParameterList'. DOH! – opncow

-3

Các thông số được đặt tên tốt hơn các tham số vị trí, chúng ta nên cẩn thận khi xem xét thứ tự/vị trí - trong khi đặt tên dễ dàng.

tên:

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

Positional:

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

Hoàn toàn đồng ý, nhưng điều đó không trả lời câu hỏi của tôi về các truy vấn IN (...) –

Các vấn đề liên quan