我正在研究基於QueryDSL並使用SpringData進行查詢執行的動態過濾器組件。因此,我從收到的數據廣告中將Predicate
個實例創建爲QueryDslPredicateExecutor
。對於動態訪問實體屬性,我使用類型爲實體類的通用PathBuilder
。通過其元素的多個屬性過濾器集合 - QueryDSL
考慮以下(簡化)代碼:
class Offer {
List<LanguageToName> names;
}
class LanguageToName {
String name;
String language;
}
當我嘗試查詢Offer
entites的,那些在他們的收藏name
與屬性「ABC」元素,我簡單地創建謂詞如下:
pathBuilder.getCollection("names", LanguageToName.class).any().getString("name")
.like("%" + fieldData.getFieldValue() + "%");
但是,我無法想出一個解決方案,使用PathBuilder
通過包含對象的多個屬性過濾集合。當我將上面的代碼附加到.and()
並通過pathBuilder
變量再次訪問集合時,我自然會得到相當於將AND EXISTS...
附加到sql查詢的結果,這不是所需的結果。我也嘗試使用getCollection().contains()
,但我無法創建描述這種情況的Expression<LanguageToName>
。
有沒有辦法創建一個Predicate
可以通過集合中元素的多個屬性過濾實體,即查詢實體的字段?