我正在使用 querydsl
进行 sql 选择。现在我有了要转换为 querydsl 的 native 查询。它由括号中的两个 OR 语句组成,后跟 AND 查询,从而适用于两个 OR 部分。
我需要以下内容:
((q1 AND q2) OR (q3 AND q4)) AND q5
在 querydsl 中我可以这样写:
boolean 表达式查询 = q1.and(q2).or(q3.and(q4)).and(q5)
但这不一样。我真正想要的是(注意括号):
boolean 表达式查询 = ((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了解更多信息。
关于java - 如何在querydsl查询中添加括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48400869/