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

标签 java jpa spring-data-jpa hibernate-criteria predicate

我有一个要附加到 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/

相关文章:

mysql - 带 hibernate 功能的 Spring Boot : Auto-generating database schema with columns which can holds fractions of seconds

java - JpaSpecificationExecutor JOIN + ORDER BY 规范

spring-data - 领域驱动设计存储库和 Spring Data 存储库之间是否存在不匹配?

java - 如何在我的 Android 应用程序中显示上传到 Google Drive 的进度?

java - 如何在Java中使用ZipFile类递归打开所有文件包括文件夹下的文件

java - Hibernate的mappedBy和ManyToMany

elasticsearch - Elasticsearch 5.5高亮字段不起作用

java - 测试 Hibernate 存储库时,Spring Boot 不会处理 junit 中的提交

java - Wildfly 8.2 中的 Kerberos sql server 数据源

java - 谁能告诉我为什么这在 Eclipse 中有效但在命令提示符中不起作用?