[sql] JPQL IN 절 : Java-Arrays (또는 Lists, Sets…)?

우리 데이터베이스에서 작지만 임의의 값으로 설정된 텍스트 태그가있는 모든 개체를로드하고 싶습니다. SQL에서이 문제를 해결하는 논리적 방법은 “IN”절을 작성하는 것입니다. JPQL은 IN을 허용하지만 모든 단일 매개 변수를 IN에 직접 지정해야하는 것 같습니다 (예 : “in (: in1, : in2, : in3)”).

IN 절의 값으로 풀어야하는 배열이나 목록 (또는 다른 컨테이너)을 지정하는 방법이 있습니까?



답변

JPA 1.0에 대해 잘 모르겠지만 CollectionJPA 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에서 최대 절전 모드로 해결되었습니다.


답변