spring数据jpa按对象列表查找

2fjabf4q  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(319)

根据以下模式,

public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String productName;

    private String category; 

    private String vendorName;

// Constructor, getters and setters
}

我想找到所有的 products 等于任何一对 category 以及 vendorName 我已经为此创建了一个类

public class FilterRequest {
    private String vendorName;
    private String category;

// Constructors, getters and setters
}

理想情况下,回购协议应具有以下签名:,

@Query(---QUERY---)
List<Product> findAllByFilterRequestList(List<FilterRequest> filterRequests);

你知道我该怎么做吗?我想一个接一个地做,但会影响表演。

uqcuzwp8

uqcuzwp81#

您可以尝试使用querydsl,它使用 predicate 来使用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 是聚合另一个 predicate 的主 predicate booleanBuilder2 . booleanBuilder2 检查vendorname和category值是否与产品相等的值。
存储库

@Repository
public interface ProductRepository extends JpaRepository<Product, Long>, QuerydslPredicateExecutor<Product> {}

相关问题