2011-08-18 6 views
4

QueryDSL 라이브러리에서 com.mysema.query.types.expr.SimpleExpression<T> 클래스는 SimpleExpression.in(CollectionExpression<?, ? extends T>) 메서드를 사용하여 컬렉션을 반환해야하는 식을 사용해야합니다. 그러나 유형 com.mysema.query.types.CollectionExpression<?, ? extends T>의 개체를 만드는 방법을 찾을 수 없습니다.QueryDSL에서 CollectionExpression 사용

내 쿼리 식는 다음과 같습니다 : 내가 expression이 원하는

QEvent.event.organization.in(expression) 

뭔가 같은 :

QOrganization.organization.country.in("India", "USA") 

그러나 두 번째 표현식 유형 com.mysema.query.types.expr.BooleanExpression이며 나는를 찾을 수 없습니다입니다 그것을 com.mysema.query.types.CollectionExpression<?, ? extends T>으로 변환하는 방법.

나는 QueryDSL API docs에서 보았지만 관련있는 항목을 찾을 수 없습니다.

+0

QEvent'의 '조직'유형은 무엇입니까? – ponzao

답변

11

에 있습니다. 호환되지 않습니다.

다음과 같은 표현은 아마 이런 식으로 뭔가를 표현하려고 마십시오

QEvent.event.organization.in( 
    QOrganization.organization.country.in("India", "USA")) 

에게 어떤 의미?

QEvent event = QEvent.event; 
QOrganization organization = QOrganization.organization; 
query.from(event) 
    .innerJoin(event.organization, organization) 
    .where(organization.country.in("India", "USA")) 
    .list(event); 

또는 간단하게는

QEvent event = QEvent.event; 
query.from(event) 
    .where(event.organization.country.in("India", "USA")) 
    .list(event); 

나는 무엇을 설명하기 위해 노력하는 하위 쿼리를 사용하여 표현이었다고 생각한다. 이

query.from(event) 
    .where(event.organization.in(subQuery().from(organization) 
     .where(organization.country.in("India", "USA"))) 
    .list(event); 

하위 쿼리의 구현()와 같은 뭔가 Querydsl 백엔드 고유의 것입니다. 조인을 사용하는 경우 일치하는 각 이벤트 - 조직 조합에 대한 행을 가져오고 부속 조회와 함께 주어진 제약 조건을 충족하는 조직이있는 고유 한 이벤트를 얻습니다.

조인 대 서브 쿼리의 성능 차이는 구현에 따라 다릅니다.

어떤 Querydsl 백엔드를 사용합니까? JPA, SQL 또는 다른 것?

+0

JPA를 QueryDSL 백엔드로 사용하고 있습니다. 그리고 당신 말이 맞아요, 저는 서브 쿼리 방식으로 가려고했습니다. –

1

나는 그런 식으로 할 수 있다고 생각지 않는다. 어쨌든 DB 측에서는 의미가 없다.

당신은 당신은 java.util.Collection이에 java.lang.Boolean에 변환 할 수없는 이유 같은 이유로, CollectionExpression로 BooleanExpression을 변환 할 수 없습니다 use a SubQuery