在Querydsl中设置括号

时间:2017-01-04 15:25:13

标签: java sql querydsl parentheses

如何在Querydsl中设置括号?如果我有一个复杂的布尔表达式,例如

b1 and b2 and (b3 or b4 and b5) and (b5 and b6 or b7)

如本示例所示,获取一个嵌套布尔表达式的select语句会很好。我得到的Querydsl最好的结果是

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(..))

我的代码看起来像这样:

def formatStringList(ls):
    if len(ls) == 0:
        return 'None'
    elif len(ls) == 1:
        return ls[0]
    else:
        return ', '.join(ls[:-1]) + ', and ' + ls[-1]

1 个答案:

答案 0 :(得分:0)

QueryDSL生成的结果在逻辑上是等效的。

但是,如果您确实要在其中加括号,则QueryDSL的WRAPPED运算符将表达式包装在括号内。

使用:

Expressions.predicate(Ops.WRAPPED, firstExpression.and(secondExpression))