または条件で追加するリストがあります
私が直面している問題は、リストを反復処理してそれをCategoryBuilderに追加すると、最後の述語が使用されることです。
次に例を示します。
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;
};
}
また、次のように、リストをfinalPredicateに渡すための配列にしようとしました。
Predicate finalQuery = cb.or(predicates.toArray());
ただし、必要なパラメータは可変引数であるため、このコードではコンパイルエラーが発生しました。
またはメソッドは(述語...述語)をパラメータリストとして受け入れます
この問題の簡単な解決策を教えてください。
これを試して:
Predicate finalQuery = cb.or(predicates.toArray(new Predicate[0]));