다음 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);
...
답변
최대 절전 모드의 이전 버전은 없을 수 있습니다 setParameterList
에 대한 방법을 Query
. setParameter("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);