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

标签 java querydsl

我正在使用 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/

相关文章:

null - 检查左连接中的空值时是否可以使用 Querydsl CaseBuilder?

java - 如何在 querydsl 中使用别名?

Java 虚拟内存大小大于请求(或要求)

java - 最佳实践 : instance variables filling over time

java - 从 SQL 查询检索时保留在列表中的顺序

java - Gradle编译QuerydslJava失败

QueryDSL:从 PathBuilder 生成谓词

hibernate - Solr,Hibernate和QueryDSL与分片

java - 我们可以在 ExplicitWait 预期条件中传递条件参数吗?

java - Spark Dataframe 到 Java 类的 Dataset