如何使用CriteriaBuilder在一个“ OR”子句中执行多个“ IN”?

时间:2019-05-27 12:52:41

标签: spring-boot spring-data-jpa spring-data hibernate-criteria

我试图使用CriteriaBuilder实现规范,但是当我尝试在一个“ OR”子句中使用多个“ IN”子句时,却遇到了运行时错误。

这是要演化的初始代码:

 @Override
 public Predicate toPredicate(Root<InvoiceFlux> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
     List<Predicate> predicates = new ArrayList<>();
     Path<Group> senderStructure = root.get("senderStructure");
     predicates.add(structure.in(requestParams.getListIdStructure()));
     // other predicates...
     return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
 }

我尝试过这个:

 @Override
 public Predicate toPredicate(Root<InvoiceFlux> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
     List<Predicate> predicates = new ArrayList<>();
     Path<Group> senderStructure = root.get("senderStructure");
     Path<Group> supplierStructure = root.get("supplierStructure");
     predicates.add(criteriaBuilder.or(senderStructure.in(requestParams.getListIdStructure(), supplierStructure.in(requestParams.getListIdStructure()))));
     // other predicates...
     return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
 }

但是它不起作用,我也不明白为什么。

我遇到以下错误:

java.lang.IllegalArgumentException: Parameter value element [100033] did not match expected type [com.neovacom.neovabills.model.Structure (n/a)]

您知道我做错了什么或如何实现吗?

0 个答案:

没有答案