[hibernate] (…) 쿼리에서 HQL을 작성하는 적절한 방법

다음 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);


답변