簡體   English   中英

QueryDSL動態謂詞鏈接

[英]QueryDSL dynamic predicate chaining

如何使用QueryDSL動態建立和鏈接謂詞。

我有一個帶有數據表的UI。 每列都有一個框,您可以在其中輸入一個過濾條件。 像這樣:

用戶界面

在上面的示例中,eventno過濾器=“ 0288”,地址過濾器=“驅動器”。 然后,UI將這些內容發送到分頁對象中的后端,該對象包含列名稱和過濾字符串的映射。 像這樣:

分頁

現在,在使用QueryDSL的后端中,我需要根據為各列提供的術語動態構建謂詞。 我僅針對address事件和address列嘗試過此操作,但似乎並未同時過濾兩者。

public Page<EpisodeDashboard> getPage(int pageNumber, int pageSize, Sort sort, PaginationCriteria pagination) {
    BooleanBuilder where = new BooleanBuilder();
    if (pagination.getFilterBy().getMapOfFilters().get("eventno")!=null) {
        where.and(qEpisode.eventno.containsIgnoreCase(pagination.getFilterBy().getMapOfFilters().get("eventno")));
        }
    if (pagination.getFilterBy().getMapOfFilters().get("address")!=null) {
        where.and(qEpisode.address.formattedAddress.containsIgnoreCase(pagination.getFilterBy().getMapOfFilters().get("address")));
        }
    List<Episode> e = episodeRepository.findAll(where);

我可能希望散列表中的每個鍵/值都帶有a的東西來動態構造謂詞。

上面的代碼實際上有效,但是:

episodeRepository.findAll(where);

返回一個可迭代的對象,並且我的大多數項目都使用List。 因此,我將Episode Repo修改為覆蓋以下內容:

    @Override
    List<Episode> findAll(Predicate predicate);

現在,將返回一個列表,並且代碼可以正常工作。 如果可以通過遍歷分頁過濾器哈希圖來生成“ if”語句,則可以增強此答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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