2009-05-06 5 views
11

원시 SQL 쿼리에 대해 INA 절을 동적으로 생성하여 JPA 엔터티를 반환하려고합니다. Hibernate는 JPA 제공자입니다. 우리 코드는 다음과 같습니다.원시 SQL 쿼리에서 IN 절 사용

@NamedQuery(
    name="fooQuery", 
    queryString="select f from Foo f where f.status in (?1)" 
) 

.... 

Query q = entityManager.createNamedQuery("fooQuery"); 
q.setParameter(1, "('NEW','OLD')"); 
return q.getResultList(); 

이 방법은 작동하지 않으며 in 절은이 방식으로 전달 된 값을 인식하지 못합니다. 누구든지이 문제에 대한 해결책을 알고 있습니까?

+0

입니까? –

답변

15

JPA는 귀하의 경우, 이름 목록 매개 변수를 지원합니다 : 어디 네이티브 SQL 쿼리는

@NamedQuery(
    name="fooQuery", 
    queryString="select f from Foo f where f.status in (?1)" 
) 

Query q = entityManager.createNamedQuery("fooQuery"); 

List<String> listParameter = new ArrayList<>(); 
listParameter.add("NEW"); 
listParameter.add("OLD"); 

q.setParameter(1, listParameter); 
return q.getResultList(); 
0

쿼리에 복합 매개 변수를 사용하지 말고 개별적으로 나누는 것이 좋습니다. ('NEW','OLD')을 지정하지 마십시오. 'NEW''OLD'의 별도 매개 변수를 지정하십시오. 그게 도움이 될거야.

매개 변수 길이가 정의되지 않은 경우 문제가 발생할 수 있습니다.