繁体   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