[英]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 和 AnyOf 函数
((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.