다음 HQL 쿼리를 작성하고 싶다고 가정합니다.
FROM Cat c WHERE c.id IN (1,2,3)
이것을 매개 변수화 된 쿼리로 작성하는 적절한 방법은 무엇입니까?
FROM Cat c WHERE c.id IN (?)
답변:
위치 매개 변수를 사용하여이 작업을 수행하는 방법을 잘 모르겠지만 위치 대신 명명 된 매개 변수를 사용할 수 있다면 명명 된 매개 변수를 대괄호 안에 넣을 수 있으며 쿼리 인터페이스의 setParameterList 메서드를 사용하여 값 목록을이 매개 변수에 바인딩 할 수 있습니다.
...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...
명명 된 매개 변수는 위치 매개 변수보다 낫습니다. 순서 / 위치를 살펴볼 때주의해야합니다.
명명 된:
Query query = session.createQuery("select count(*) from User"+" where userName=:userName and passWord=:passWord");
query.setString("userName", userName);
query.setString("passWord", passWord);
위치 :
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))
일어 났는지 알아내는 데 한 시간을 보냈습니다 .setParameter
대신 전화 했습니다setParameterList
. DOH!