簡體   English   中英

Spring 數據 JPA 按對象列表查找

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

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