簡體   English   中英

如何為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)); 

有關更多信息,請參見這些示例

使用 orAllOf 和 A​​nyOf 函數

((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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM