[英]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.