2016-11-22 5 views
2

WHERE 절을 QueryDSL에서 WHERE ? BETWEEN col1 AND col2과 같이 쓰려면 어떻게해야합니까? 나는QueryDSL "WHERE? COL1과 COL2 사이"를 쓰는 방법

... 
.where(mytable.col1.loe(constant), mytable.col2.goe(constant)) 
... 

, 대신에 다음과 같이 내가 쓸 수 있습니다 알고 있지만 BETWEEN를 사용하여 쿼리를 더 읽을 수 있습니다.

QueryDSL 3.2.3을 사용합니다.


UPDATE :

final int constant = 10; 
final QMyTable m = QMyTable.myTable; 
final SimpleExpression<Boolean> operation = Expressions.operation(Boolean.class, Ops.BETWEEN, 
     Expressions.constant(constant), m.col1, m.col2); 

// This yields: 
// SELECT ID, COL1, COL2 FROM MYTABLE WHERE ((? BETWEEN COL1 AND COL2) = ?) 
// bind => [10, true] 
final MyTable actual = new JPAQuery(em).from(m).where(operation.eq(true)).uniqueResult(m); 

그것은 어쨌든 작동하지만 일부 = ?가 중복 :

나는이 (A testcase which runnable via mvn test) 같은 것을 함께했다. 나는 좀 더 간단한 것을 원한다.

SELECT ID, COL1, COL2 FROM MYTABLE WHERE (? BETWEEN COL1 AND COL2) 

나는 그것을 쓰는 방법을 모른다. QueryDSL을 통해이 쿼리를 구성 할 수있는 방법이 있습니까?

+1

당신은 [상수 표현식을 작성] 수 (/ 질문/7661770/방법 - 투 - 상수 숫자 값 표현 -에 - querydsl 생성)과'between' 방법을 사용합니다. 그게 효과가 있니? –

+0

@Rhymoid 안녕하세요, 감사합니다. 정보. 나는 그것에 대해 조사하고 질문을 편집하고 또 다른 질문을 추가했다. 그 생각을 알아? –

+0

@Rhymoid 답변을 찾았습니다. 도와 줘서 고마워! http://stackoverflow.com/a/40759823/3591946 –

답변

4

난 그냥이를 발견했습니다 : 이것은 정확히 찾고 있었던 일을 구성

final int constant = 10; 
final QMyTable m = QMyTable.myTable; 
final BooleanExpression operation = Expressions.booleanOperation(Ops.BETWEEN, 
     Expressions.constant(constant), m.col1, m.col2); 

// This yields: 
// SELECT ID, COL1, COL2 FROM MYTABLE WHERE (? BETWEEN COL1 AND COL2) 
// bind => [10] 
final MyTable actual = new JPAQuery(em).from(m).where(operation).uniqueResult(m); 

.

테스트 케이스 : https://github.com/lbtc-xxx/querydsl-sandbox/blob/master/src/test/java/sandbox/QueryDslBetweenTest.java

+0

''Expressions.constant (constant) .between (m.col1, m.col2)'가 작동하지 않습니까? –

+1

'Expression'으로 인해 컴파일 오류가 발생합니다. 'between()', [적어도 QueryDSL 3.2.3] (http://www.querydsl.com/static/querydsl/3.2.3) 메소드가 없습니다. /apidocs/com/mysema/query/types/Expression.html). –