gpt4 book ai didi

java - 如何将谓词列表添加到 CriteriaBuilder.or

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:35 26 4
gpt4 key购买 nike

我有一个要附加到 or 条件中的列表

我面临的问题是当我遍历 List 并将其添加到 CategoryBuilder 然后它采用最后一个 Predicate

例子如下:

public static Specification<Billoflading> hasTenantAndBillingCodeCombination(List<WhoOwnsIt> list,
Date formattedFromDate, Date formattedToDate, String carrierFilter, String supplierFilter,
String terminalFilter) {
return (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();

for (WhoOwnsIt whoOwnsIt : list) {
String containsLikePatternForTenant = getContainsLikePattern(whoOwnsIt.getWholesalerTenantID(), true);

Predicate pred = cb.and(cb.like(cb.lower(root.<String>get("tenant")), containsLikePatternForTenant),
cb.equal(cb.lower(root.<String>get("billingCode")), whoOwnsIt.getBillingCode()),
cb.greaterThanOrEqualTo(root.<Date>get("scheduleDate"), formattedFromDate),
cb.lessThanOrEqualTo(root.<Date>get("scheduleDate"), formattedToDate));

Predicate predWithTenant = null;

if (null != carrierFilter) {
predWithTenant = cb.and(cb.equal(cb.lower(root.<String>get("tenant")), carrierFilter));
}

if (null != predWithTenant)
predicates.add(predWithTenant);
else
predicates.add(pred);

}
Predicate finalPredicate;
// This commented section below needs to be replaced with a
//better solution
//for(Predicate predicate : predicates){
// cb.or(predicate);
//}

return finalPredicate;
};
}

我还尝试使 List 成为一个数组,以便将其传递给 finalPredicate.or,如下所示

Predicate finalQuery = cb.or(predicates.toArray());

但是这段代码给出了编译错误,因为需要的参数是可变参数即

或方法接受(Predicate...谓词)作为参数列表

能否请您提供一些简单的解决方案来解决这个问题?

最佳答案

试试这个:

Predicate finalQuery = cb.or(predicates.toArray(new Predicate[0]));

关于java - 如何将谓词列表添加到 CriteriaBuilder.or,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com