如何在Querydsl中设置括号?如果我有一个复杂的布尔表达式,如
b1 and b2 and ((b3 or b4) and b5) and ((b6 and b7) or b8)
如果能像这个例子一样,得到一个嵌套布尔表达式的选择语句就更好了。使用Querydsl我得到的最好结果是
b1 and b2 and (b3 or b4 and b5) and (b5 and b6 or b7)
我的代码是这样的。
BooleanExpression be = obj.v1.eq(key)
.and(obj.v2.eq(..))
.and(obj.v3.goe(..).or(obj.v3.loe(..)).and(obj.v4.eq(..))
.and(obj.v5.goe(..).and(obj.v5.loe(..)).or(obj.v5.goe(..))
QueryDSL生成的结果在逻辑上是等价的。
然而,如果你真的想要括号,QueryDSL有以下功能 WRAPPED
操作符,将一个表达式包装在括号内。
使用。
Expressions.predicate(Ops.WRAPPED, firstExpression.and(secondExpression))