簡體   English   中英

QueryDSL多參數搜索,同時在值為null時構建查詢跳過謂詞

[英]QueryDSL multiparameter search, while building the query skip predicate when value is null

我正在使用QueryDSL JPA開發Spring Boot Web應用程序。 我有一個REST api,我從用戶那里獲得表單輸入。 我必須執行多參數搜索。 如果用戶inpu的值為null(可以,因為並非所有字段都被取消),我的查詢構建器應該在查詢數據庫時跳過此值。

在我的QueryDSL部分,我得到一個Object,例如“Solution”,它可能如下所示:

ticketNumber:4261(整數)
errorFlag:false(布爾值)
statusOCIA:null(字符串)
description:“單擊圖像時出現錯誤”(String)

我嘗試使用來自QueryDSL的PathBuilder和BooleanBuilder動態構建查詢:

    public List<Solution> findSolutionBySolutionQuerydsl(Solution searchSolution) {


    QSolution solution = QSolution.solution;
    JPAQuery<?> query = new JPAQuery<Void>(em);


    BooleanBuilder builder = new BooleanBuilder();
    PathBuilder<QSolution> QentityPath = new PathBuilder<QSolution>(QSolution.class, "solution");
    PathBuilder<Solution> entityPath = new PathBuilder<Solution>(Solution.class, "serachSolution");

    Field[] fields = searchSolution.getClass().getDeclaredFields();


    for (Field attr : fields) {

        if (searchSolution."here it should perform searchSolution.getTicketNumber or searchSolution.getDiscription depending on what attr.getName is"  != null) {
            builder.or(QentityPath.get(attr.getName()).eq(entityPath.get(attr.getName())));

        }
    }

    List<Solution> s1 = query.select(solution)
            .from(solution)
            .where(builder)
            .fetch();

    System.out.println(("query: " + s1));

    return s1;

}

我想它會像這樣工作:如果attr.getName是“description”,它應該執行searchSolution.getDescription。

我嘗試了一些HashMap或ArrayList的東西,但由於我的Object中的數據類型不同而失敗了。

我希望有一個人可以幫助我。

嘗試將此檢查置於if條件中

entityPath.get(attr.getName()) != null

做到這一點

if (entityPath.get(attr.getName()) != null) {

    builder.or(QentityPath.get(attr.getName()).eq(entityPath.get(attr.getName())));
}

暫無
暫無

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

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