我在我的應用程序中使用了Spring Data和JPA,我試圖爲動態標準API實現QueryDSL。至於如果我在標準發送特定的值,它使用下面的謂詞正常工作:在QueryDSL和彈簧數據中使用動態篩選器映射創建查詢JPA
Predicate predicate = QProductInfo.productInfo.shopName.eq(shopName).and(QProductInfo.productInfo.productType.eq(productType));
但是,如果我收到多個過濾參數,需要使用地圖存儲鍵 - 值對(列 - COLUMN_VALUE)爲了動態派生查詢,我無法爲相同的查詢創建查詢。 意思我知道我可以在Predicate中添加儘可能多的使用和或其他操作符的條件,但是確切地說我需要使用的表達式只有在運行時才能決定,因此無法找出形成正確表達式的方式。
下面是一些代碼信息
@Entity
Public class ProductInfo{
productId;
title;
vendor;
code;
.... and more
}
立即過濾從1到n的字段與值等 濾波器1 = PRODUCT_ID = 123,標題=測試 濾波器2 =標題= XYZ,代碼= ABC可以變化,vendor = pqr
因此,我將使用map來存儲鍵值對(title-xyz等),並且想動態地構造查詢。
我經歷了很多教程,但到目前爲止我找不到合適的解決方案。我還在爲迭代地圖循環的同時使用Switch,但是如何將所有表達式/謂詞關聯起來,我沒有任何想法。
如果我找不到解決方案,可能我會使用JPA Criteria API,我們可以輕鬆地使用Predicates List。 讓我知道是否有任何信息需要幫助我在這裏。
感謝
您可以使用實現謂詞的BooleanBuilder。 http://www.querydsl.com/static/querydsl/3.6.3/apidocs/com/mysema/query/BooleanBuilder.html。如果參數來自Spring Web應用程序,那麼您也可以自動構建謂詞https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-gosling #querydsl-web-support –
謝謝Alan。我將嘗試更有效地使用BooleanBuilder。雖然我仍然懷疑如何在運行時設置對象屬性,但意味着key和value都是運行時間,所以如何使用key作爲qproductInfo.ProductInfo。 .eq(map value); 我正在嘗試,並會回覆評論。 –
yateen