使用querydsl搜索null

时间:2016-04-19 19:27:41

标签: java spring spring-data spring-data-jpa querydsl

我有一个像这样搜索的控制器方法

@RequestMapping(method = RequestMethod.GET)
public Page<MyEntity> find(@QuerydslPredicate(root = MyEntity.class)
                                     Predicate predicate,
                         Pageable pageable) {

    return this.myEntityRepository.findAll(predicate, pageable);
}

效果很好。我可以发出带有各种查询字符串参数的GET请求,并相应地进行过滤,但现在我想通过null进行搜索。我尝试过/myentity?myParam1=&之类的操作,但predicate参数始终是null

如何搜索特定字段为空的位置?

2 个答案:

答案 0 :(得分:1)

无法通过myParam1=null之类的空参数搜索实体,因为它会抛出NullPointerException。 我遇到了同样的问题,这是我能让它发挥作用的唯一方法。


@RequestMapping(method = RequestMethod.GET)
public Page find(@QuerydslPredicate(root = MyEntity.class) Predicate predicate, Pageable pageable, @RequestParam MultiValueMap parameters) {

    Page entities = myEntityRepository.findAll(predicate, pageable);
    if(parameters.get("myParam1") != null && 
            parameters.get("myParam1").get(0) != null &&
            parameters.get("myParam1").get(0).isEmpty()) {

        QEntity entity = QEntity.entity;
        BooleanExpression myParam1IsNull = entity.in(entities.getContent()).and(entities.myParam1.isNull());
        entities = myEntityRepository.findAll(myParam1IsNull, pageable);
    }

    return entities;
}

它对数据库执行两次查询,但它解决了这个问题。 我希望这会对你有所帮助。

答案 1 :(得分:0)

您可以通过myParam.isNull()