![](/img/trans.png)
[英]Get List of Entity Objects with Input List : Spring Data JPA - Hibernate
[英]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.