[英]Get List of Entity Objects with Input List : Spring Data JPA - Hibernate
[英]Spring Data JPA Find By List of Objects
給定以下架構,
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String productName;
private String category;
private String vendorName;
// Constructor, getters and setters
}
我想找到等於任何一對category
和供應商名稱的所有products
我為此創建了一個vendorName
public class FilterRequest {
private String vendorName;
private String category;
// Constructors, getters and setters
}
理想情況下,回購應具有以下簽名,
@Query(---QUERY---)
List<Product> findAllByFilterRequestList(List<FilterRequest> filterRequests);
知道我應該如何處理嗎? 我正在考慮一個一個地做這個,但它會影響性能。
您可以嘗試使用使用謂詞的QueryDSL使用 FilterRequest 列表過濾掉產品
服務
public List<Product> getAllProductsByFilterRequests(List<FilterRequest> filterRequests) {
BooleanBuilder booleanBuilder = new BooleanBuilder();
filterRequests.forEach(
filterRequest -> {
BooleanBuilder booleanBuilder2 = new BooleanBuilder();
booleanBuilder2.and(QProduct.product.category.eq(filterRequest.category));
booleanbuilder2.and(QProduct.product.vendorName.eq(filterRequest.vendorName));
booleanBuilder.or(booleanBuilder2);
}
);
Predicate predicate = booleanBuilder.getValue();
return (List<Product>) productRepository.findAll(predicate);
}
如您所見, booleanBuilder
是聚合另一個謂詞booleanBuilder2
的主要謂詞。 booleanBuilder2
用於檢查 vendorName 和 category 值是否與產品相同。
存儲庫
@Repository
public interface ProductRepository extends JpaRepository<Product, Long>, QuerydslPredicateExecutor<Product> {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.