如何在querydsl中为查询添加括号?

时间:2018-01-23 11:41:31

标签: java querydsl

我正在使用querydsl进行sql选择。现在我有本机查询,我想转换为querydsl。它由括号中的两个OR语句组成,后跟AND和查询,从而对两个OR部分都适用。

我需要以下内容:

((q1 AND q2) OR (q3 AND q4)) AND q5

在querydsl我可以写例如:

BooleanExpression query = q1.and(q2).or(q3.and(q4)).and(q5)

但那不一样。我真正想要的是(注意括号):

BooleanExpression query = ((q1.and(q2)).or((q3.and(q4))).and(q5)

问题:如何在java中实现这一点?如何在逻辑上将这些括号添加到querydsl表达式。

1 个答案:

答案 0 :(得分:3)

我们假设我们有三个BooleanExpression,我们想表达(q1 || q2) && q3

如果您编写q1.or(q2).and(q3),则and语句是顶级操作数,首先评估q1.or(q2),然后将其用作表达式的左侧。这是因为操作按它们出现的顺序进行评估。请记住,这是Java语法。因此,使用该声明是有效的。

但是,如果你不喜欢这种符号,那么另一种选择就是简单地写下以下内容:

q3.and(q1.or(q2)); 

有关详细信息,请参阅these examples