繁体   English   中英

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

[英]How to add parenthesis to queries in 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 表达式中。

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

如果您编写q1.or(q2).and(q3) ,则and语句是顶级操作数,并且首先对q1.or(q2)求值,然后将其用作表达式的左侧。 这是由于以下事实:按照操作出现的顺序对其进行了评估。 请记住,这是Java语法。 因此,使用该语句将是有效的。

但是,如果您不喜欢这种表示法,则可以选择编写以下代码:

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

有关更多信息,请参见这些示例

使用 orAllOf 和 A​​nyOf 函数

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

query.where( q5.orAllOf(andAnyOf(q1,q2), andAnyOf(q3,q4)) )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM