【问题标题】:Simple (E1 AND E2) OR (E3 AND E4) expression in QueryDSLQueryDSL 中的简单 (E1 AND E2) OR (E3 AND E4) 表达式
【发布时间】:2012-05-11 10:14:23
【问题描述】:

QueryDSL where 子句中如何表达形式:

 WHERE (E1 AND E2) OR (E3 AND E4) 

E1..E4 是任意布尔表达式。关键是要在括号内开始查询,因此是 (E1 AND E2)。

【问题讨论】:

  • 你找到你要找的东西了吗?

标签: querydsl


【解决方案1】:
where(e1.and(e2).or(e3.and(e4)))

【讨论】:

  • 这与上面的逻辑公式是等价的,但不一样。如果我想生成一个以括号开头的 SQL 语句,尽管它在逻辑上等同于没有括号的公式,该怎么办?
  • Querydsl 保证表达式以正确的方式序列化为 SQL,因此您不必担心括号
  • “我不需要担心”对我来说听起来有点棘手。我永远不知道where(e1.or(e2).and(e3)) 是指(e1 or e2) and e3) 还是e1 or (e2 and e3)。我真的很惊讶where(e1.or(e2).and(e3.or(e4))) 产生了我真正想要的(e1 or e2) and (e3 or e4)。但是第一个 OR 是怎么出现在括号里的呢?基于什么?那么...and(e3.or(e4))...and(e3).or(e4) 有什么影响吗?我们通常会在日志中查看我们的查询,但我希望找到有关此序列化的更具体的内容。
  • @TimoWestkämper 是的,它确实有帮助。与此同时,我还找到了 BooleanBuilder - 我猜这是对任何更复杂的事情的答案。首先我必须说,我使用 Querydsl 大约 4 个月——它是我遇到过的最好的库之一(可用性、易于采用……)——但整个域具有固有的复杂性。有时我想在“where”上使用 javadoc,但由于它是生成的,它没有帮助(可以理解)。我找不到 x1.or.x2.or.x3.and.x4.whateveroperation.x5 的确切解释。但是,蒂莫,你在我看到的任何论坛上都做得很好。非常感谢。
  • @TimoWestkämper 我这样做时遇到了问题。通过我的调试器,生成的 jpa QL 显示为“a and b or c and d”。我想要“(a 和 b)或(c 和 d)”括号丢失。查询DSL 3.6.3。
猜你喜欢
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2014-05-13
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多