我试图使用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)]
您知道我做错了什么或如何实现吗?