如何在Spring Data中为条件添加多个AND条件

时间:2016-08-15 18:16:39

标签: java spring spring-data

我正在尝试添加多个'和' Spring Data中的标准条件,但无法弄清楚我做错了什么。 请参考以下代码:

Criteria criteria = new Criteria();
        criteria.andOperator(Criteria.where("siteCode").is(siteCode));

        if(paymentMode != null) {
            criteria.andOperator(Criteria.where("paymentMode").is(paymentMode));
        }
        if(planCode != null) {
            criteria.andOperator(Criteria.where("packageCode").is(planCode));
        }
        if(status){
            criteria.andOperator(Criteria.where("expiryDateTime").gt(new Date()));
        } else {
            criteria.andOperator(Criteria.where("expiryDateTime").lte(new Date()));
        }

        Query query = new Query(criteria);

        List<UserPackage> userPackageList = mongoTemplate.find(query, UserPackage.class);

2 个答案:

答案 0 :(得分:9)

我发现了我做错了什么。您不需要使用方法&#39; andOperator&#39;内部的另一个标准。

只需使用&#39;和&#39;方法,然后链接您要使用的以下运算符方法。

分享工作解决方案,以帮助像我这样的其他新人。

        Criteria criteria = new Criteria();
        criteria = criteria.and("siteCode").is(siteCode);
        if (paymentMode != null) {
            criteria = criteria.and("paymentMode").is(paymentMode);
        }
        if (planCode != null) {
            criteria = criteria.and("packageCode").is(planCode);
        }
        if (status) {
            criteria = criteria.and("expiryDateTime").gt(new Date());
        } else {
            criteria = criteria.and("expiryDateTime").lte(new Date());
        }
        Query query = new Query(criteria);

答案 1 :(得分:0)

以防万一,如果您想为日期之间添加条件并与另一个字段匹配,请使用以下内容。

    Criteria criteria = Criteria.where("date").gte(from).andOperator(Criteria.where("date").lt(to));

    if (StringUtils.isNotBlank(manager)) {
        criteria = criteria.and("manager").is(manager);
    }