QueryDSL怎么写"WHERE ? BETWEEN col1 AND col2"
QueryDSL how to write "WHERE ? BETWEEN col1 AND col2"
如何使用 QueryDSL 编写类似于 WHERE ? BETWEEN col1 AND col2
的 WHERE
子句?我知道我可以改写如下,
...
.where(mytable.col1.loe(constant), mytable.col2.goe(constant))
...
但是使用 BETWEEN
使查询更具可读性。
我使用 QueryDSL 3.2.3。
更新:
我最终得到了这样的结果 (A testcase which runnable via mvn test
):
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);
它无论如何都有效,但 = ?
部分是多余的。我想要更简单的东西,比如:
SELECT ID, COL1, COL2 FROM MYTABLE WHERE (? BETWEEN COL1 AND COL2)
我不知道怎么写。有什么方法可以通过 QueryDSL 构造这个查询吗?
我刚找到这个:
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);
这构建了一个我正在寻找的。
如何使用 QueryDSL 编写类似于 WHERE ? BETWEEN col1 AND col2
的 WHERE
子句?我知道我可以改写如下,
...
.where(mytable.col1.loe(constant), mytable.col2.goe(constant))
...
但是使用 BETWEEN
使查询更具可读性。
我使用 QueryDSL 3.2.3。
更新:
我最终得到了这样的结果 (A testcase which runnable via mvn test
):
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);
它无论如何都有效,但 = ?
部分是多余的。我想要更简单的东西,比如:
SELECT ID, COL1, COL2 FROM MYTABLE WHERE (? BETWEEN COL1 AND COL2)
我不知道怎么写。有什么方法可以通过 QueryDSL 构造这个查询吗?
我刚找到这个:
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);
这构建了一个我正在寻找的。