우리 데이터베이스에서 작지만 임의의 값으로 설정된 텍스트 태그가있는 모든 개체를로드하고 싶습니다. SQL에서이 문제를 해결하는 논리적 방법은 “IN”절을 작성하는 것입니다. JPQL은 IN을 허용하지만 모든 단일 매개 변수를 IN에 직접 지정해야하는 것 같습니다 (예 : “in (: in1, : in2, : in3)”).
IN 절의 값으로 풀어야하는 배열이나 목록 (또는 다른 컨테이너)을 지정하는 방법이 있습니까?
답변
JPA 1.0에 대해 잘 모르겠지만 Collection
JPA 2.0에서 전달할 수 있습니다 .
String qlString = "select item from Item item where item.name IN :names";
Query q = em.createQuery(qlString, Item.class);
List<String> names = Arrays.asList("foo", "bar");
q.setParameter("names", names);
List<Item> actual = q.getResultList();
assertNotNull(actual);
assertEquals(2, actual.size());
EclipseLInk로 테스트되었습니다. Hibernate 3.5.1에서는 매개 변수를 괄호로 묶어야합니다.
String qlString = "select item from Item item where item.name IN (:names)";
그러나 이것은 버그이며, 이전 샘플의 JPQL 쿼리는 유효한 JPQL입니다. HHH-5126을 참조하십시오 .
답변
Oracle 한계는 1000 개의 매개 변수입니다. 전달 된 매개 변수 목록을 500 개 세트로 분할하여 JIRA HHH-1123을 참조 하지만이 문제는 버전 4.1.7에서 최대 절전 모드로 해결되었습니다.