2 votes

QueryDSL comment écrire "WHERE ? entre col1 et col2"

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 ?

4voto

Kohei Nozaki Points 534

Je viens de trouver ça :

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);

Cette construction en est une que je recherchais exactement.

Testcase : https://github.com/lbtc-xxx/querydsl-sandbox/blob/master/src/test/java/sandbox/QueryDslBetweenTest.java

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X