[英]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.