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


80

다음 HQL 쿼리를 작성하고 싶다고 가정합니다.

FROM Cat c WHERE c.id IN (1,2,3)

이것을 매개 변수화 된 쿼리로 작성하는 적절한 방법은 무엇입니까?

FROM Cat c WHERE c.id IN (?)

답변:


130

위치 매개 변수를 사용하여이 작업을 수행하는 방법을 잘 모르겠지만 위치 대신 명명 된 매개 변수를 사용할 수 있다면 명명 된 매개 변수를 대괄호 안에 넣을 수 있으며 쿼리 인터페이스의 setParameterList 메서드를 사용하여 값 목록을이 매개 변수에 바인딩 할 수 있습니다.

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

11

최대 절전 모드의 이전 버전은 없을 수 있습니다 setParameterList에 대한 방법을 Query. setParameter("ids", listOfIds);동일한 효과를 위해 이전 버전을 계속 호출 할 수 있습니다 .


5
이것이 왜 변경 되었습니까? 왜 IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))일어 났는지 알아내는 데 한 시간을 보냈습니다 . setParameter대신 전화 했습니다 setParameterList. DOH!
opncow

-4

명명 된 매개 변수는 위치 매개 변수보다 낫습니다. 순서 / 위치를 살펴볼 때주의해야합니다.

명명 된:

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

3
완전 동의하지만, 그 IN (...) 쿼리에 대한 내 질문에 대답하지 않는다
로버트 문테 아누
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.