복붙노트

[SQL] JPQL IN 절 : 자바 배열 (또는 목록, 설정 ...)?

SQL

JPQL IN 절 : 자바 배열 (또는 목록, 설정 ...)?

나는 우리의 데이터베이스에서 값의 작지만 임의의 수의에 텍스트 태그가 설정되어 모든 객체를로드하고 싶습니다. SQL 이것에 대해 갈 수있는 논리적 방법은 "IN"절을 구축하는 것입니다. ( "IN2 : : 입방인치) : IN1 (에"에서와 같이) JPQL은 IN이 가능하지만, 직접 IN에 모든 단일 매개 변수를 지정하라고 요구하는 것 같다.

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

해결법

  1. ==============================

    1.나는 JPA 1.0 모르겠어요하지만 당신은 JPA 2.0에서 컬렉션을 전달할 수 있습니다 :

    나는 JPA 1.0 모르겠어요하지만 당신은 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와 테스트. 최대 절전 모드 3.5.1로, 당신은 괄호와 함께 매개 변수를 둘러싸고해야합니다 :

    String qlString = "select item from Item item where item.name IN (:names)";
    

    그러나 이것은 버그, 이전 샘플에서 JPQL 쿼리는 유효 JPQL입니다. 참조 HHH-5126.

  2. ==============================

    2.오라클 제한은 1000 개 매개 변수입니다. 이 문제는 비록 분할하여 버전 4.1.7에서 최대 절전 모드 500 세트에 전달 된 매개 변수 목록을 해결되었습니다  참조 JIRA HHH - 1123

    오라클 제한은 1000 개 매개 변수입니다. 이 문제는 비록 분할하여 버전 4.1.7에서 최대 절전 모드 500 세트에 전달 된 매개 변수 목록을 해결되었습니다  참조 JIRA HHH - 1123

  3. from https://stackoverflow.com/questions/2772305/jpql-in-clause-java-arrays-or-lists-sets by cc-by-sa and MIT license