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> {}