如何在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));
有关详细信息,请参阅 these examples。
我正在使用 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));
有关详细信息,请参阅 these examples。