Java条件构建器查询不为null或为空

时间:2016-12-05 16:53:46

标签: java jpa criteria-api

我试图检查数据库中的列是不是空字符串还是不是空字符但是我无法弄清楚如何使用条件构建器查询来实现它以获取实际对象。这个sql工作:

sampleName is not null and sampleName != ''

但是当我尝试使用这样的条件构建器时:

//这是私有方法filterBySampleNotEmpty

cb.notEqual(root.get("sampleName"), "");

通过另一种方法调用

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Sample> query = criteriaBuilder.createQuery(Sample.class);
Root model = query.from(Sample.class);
List<Predicate> predicates = new ArrayList<>();
predicates.add(filterBySampleNotEmpty(model, criteriaBuilder));
query.select(model).where(predicates.toArray(new Predicate[]{}));

它仍然返回整个列表。

4 个答案:

答案 0 :(得分:3)

尝试使用此代码:

criteriaBuilder.isNotNull(model.get(entity.name))

答案 1 :(得分:2)

请尝试使用以下

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Sample> query = criteriaBuilder.createQuery(Sample.class);
MetaModel m = em.getMetaModel();
EntityType<Sample> entity = m.entity(Sample.class);
Root model = query.from(Sample.class);
query.where(criteriaBuilder.notEqual(model.get(entity.name), “”)).and(criteriaBuilder.notEqual(model.get(entity.name), null));

答案 2 :(得分:0)

标准构建者&#34; notEqual&#34;测试两个表达式不相等的标准。除非我错过了什么,否则我看不到过滤空值的标准。

答案 3 :(得分:0)

在&#39;其中&#39;条款,尝试predicates.toArray(new Predicate[predicates.size()],看看是否有效。当您将List转换为Array时,由于传递空数组,因此将大小指定为0.