Giả sử rằng tôi muốn viết truy vấn HQL sau:
FROM Cat c WHERE c.id IN (1,2,3)
cách thích hợp để viết điều này dưới dạng một truy vấn được tham số hóa, ví dụ:
FROM Cat c WHERE c.id IN (?)
Giả sử rằng tôi muốn viết truy vấn HQL sau:
FROM Cat c WHERE c.id IN (1,2,3)
cách thích hợp để viết điều này dưới dạng một truy vấn được tham số hóa, ví dụ:
FROM Cat c WHERE c.id IN (?)
Câu trả lời:
Tôi không chắc làm thế nào để thực hiện việc này với tham số vị trí, nhưng nếu bạn có thể sử dụng tham số được đặt tên thay vì tham số vị trí, thì tham số được đặt tên có thể được đặt bên trong dấu ngoặc và phương thức setParameterList từ giao diện truy vấn có thể được sử dụng để liên kết danh sách giá trị với tham số này.
...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...
Tham số được đặt tên tốt hơn tham số vị trí, chúng ta nên cẩn thận trong việc xem xét thứ tự / vị trí - trong khi được đặt tên thì dễ dàng.
Đặt tên:
Query query = session.createQuery("select count(*) from User"+" where userName=:userName and passWord=:passWord");
query.setString("userName", userName);
query.setString("passWord", passWord);
Vị trí:
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))
lại xảy ra. Tôi đã gọisetParameter
thay vìsetParameterList
. DOH!