[英]Filter for Key-Value pairs using Querydsl
我的問題需要一些解釋。 我盡力使它盡可能短,而不會遺漏重要方面。 因此,已經感謝所有讀完這篇文章的人。
使用幾個查詢參數作為過濾器執行GET請求
api/parentResource?areaCode=11&childEntity.kvlist.API_KEY=123CBA321
這個例子請求將檢索列表parentResource
屬於某個特定區域,並有鍵值對API_KEY=123CBA321
在他們的孩子實體的名單(名單本身也是子實體的子實體,為了簡便起見我們稱之為KV_list )。
到目前為止,我使用Querydsl可以完成此工作,但是有一件事我無法解決自己:
問題在於 ,使用AND結合詞時querydsl的行為可能與預期的1相同 。 我需要實現的是,如果存在實際的KV 對,則KV_list上的過濾器僅返回真實的BooleanExpression / Predicate。
例:
KV_list表包含以下記錄:
+-------+-----------+-----------+---------------+
| id | key | value | foreign_key |
+-------+-----------+-----------+---------------+
| UUID1 | API_KEY | 123CBA321 | childEntityFK |
| UUID2 | KEY2 | XYZ987 | childEntityFK |
| UUID3 | OTHER_KEY | NNN | childEntityFK |
+-------+-----------+-----------+---------------+
盡管您希望上面的GET請求能夠正常工作,但是以下內容不應返回任何內容,因為KV對不存在:
api/parentResource?areaCode=11&childEntity.kvlist.KEY2=NNN
不幸的是1 ,querydsl只是檢查是否有一個key=KEY2
和一個value=NNN
,然后返回一個真實的謂詞。
該模型如下所示: Parent <--1:n--> ChildEntity <--1:n--> KV_Entity
鍵和值的簡單結合:
ExpressionUtils.allOf(this.predicate, QParent.parent.childEntities.any().kvEntities.any().key.eq(var_key), QParent.parent.childEntities.any().kvEntities.any().value.eq(var_value) );
直接在KV對象上調用eq方法:
ExpressionUtils.and(this.predicate, QParent.parent.childEntities.any().kvEntities.any()eq(var_kvObject) );
JPAExpressions.select()。from()。join()...
上面提到的幾種方法
我真的很困,不勝感激。 提前致謝!
使用的框架/庫:
我不知道您所提問題的全部內容。 也許您可以創建一個虛擬密鑰(哈希)。
包含var_key
和var_value
。
然后您可以使用QParent.parent.childEntities.any().kvEntities.any().hash.eq(hash)
搜索kvEntities
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.