Java Spring数据JPA按对象列表查找

Java Spring数据JPA按对象列表查找,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,给定以下模式 public class Product { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String productName; private String category; private String vendorName; // Constructor, getters and setters } 我想找

给定以下模式

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

    private String productName;

    private String category; 

    private String vendorName;

// Constructor, getters and setters
}
我想找到所有
产品
,它们等于任何一对
类别
供应商名称
我已经为此创建了一个类

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

// Constructors, getters and setters
}
理想情况下,回购协议应具有以下签名:

@Query(---QUERY---)
List<Product> findAllByFilterRequestList(List<FilterRequest> filterRequests);
@Query(---Query--)
列出findAllByFilterRequestList(列出filterRequests);
你知道我该怎么做吗?我正在考虑一个接一个地执行此操作,但这会影响性能。

您可以尝试使用this-use-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);
}

谢谢你的回复。如上所述,我想匹配(vendorName,category)对中的任何一个,请尝试一下,如果它解决了您的问题,请通知我。您是指FilterRequest列表吗?对不起,我忽略了这一点,你是说我应该循环查看
列表吗?嗯,是的,我知道的唯一方法是通过QueryDsl。你可以试一试,它既棒又直截了当:)
@Repository
public interface ProductRepository extends JpaRepository<Product, Long>, QuerydslPredicateExecutor<Product> {}