Java 标准构建器查询不为空或为空

Java criteria builder query not null or empty

我正在尝试检查数据库中的列是否不是空字符串或不为空,但我无法弄清楚如何使用条件生成器查询来执行此操作以取回实际对象。 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[]{}));

它returns整个列表还在。

标准构建器 "notEqual" 标准测试两个表达式是否不相等。除非我遗漏了什么,否则我看不到过滤空值的条件。

在 'where' 子句中,尝试 predicates.toArray(new Predicate[predicates.size()] 看看是否可行。当您将 List 转换为 Array 时,您将大小指定为 0,因为您传递的是一个空数组。

请尝试以下

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));

尝试使用此代码:

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