Comment puis-je écrire WHERE
qui est quelque chose comme WHERE ? BETWEEN col1 AND col2
avec QueryDSL ? Je sais que je peux écrire comme suit à la place,
...
.where(mytable.col1.loe(constant), mytable.col2.goe(constant))
...
Mais en utilisant BETWEEN
rend la requête plus lisible.
J'utilise QueryDSL 3.2.3.
UPDATE :
Je me suis retrouvé avec quelque chose comme ceci ( Un testcase exécutable 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);
Il fonctionne de toute façon mais la partie = ?
est redondant. Je veux quelque chose de plus simple, comme :
SELECT ID, COL1, COL2 FROM MYTABLE WHERE (? BETWEEN COL1 AND COL2)
Je ne sais pas comment l'écrire. Existe-t-il un moyen de construire cette requête via QueryDSL ?