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

Cry*_*tal 4 java jpa criteria-api

我正在尝试检查数据库中的列是否不是空字符串或不为null,但是我无法弄清楚如何使用条件构建器查询来获取实际对象。这个SQL的作品:

sampleName is not null and sampleName != ''
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用这样的条件构建器进行操作时:

//这是在私有方法filterBySampleNotEmpty中

cb.notEqual(root.get("sampleName"), "");
Run Code Online (Sandbox Code Playgroud)

在另一个方法中被此方法调用

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[]{}));
Run Code Online (Sandbox Code Playgroud)

它仍然返回整个列表。

小智 6

尝试使用以下代码:

criteriaBuilder.isNotNull(model.get(entity.name))
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你。你的回答是正确的。notEqual (entity, null) 可能会抛出 NPE。 (3认同)
  • 尝试在你的答案中提供更多背景信息。请参阅[此处](https://stackoverflow.com/help/how-to-answer) (2认同)

rm *_*tar 5

请尝试以下操作

\n\n
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();\nCriteriaQuery<Sample> query = criteriaBuilder.createQuery(Sample.class);\nMetaModel m = em.getMetaModel();\nEntityType<Sample> entity = m.entity(Sample.class);\nRoot model = query.from(Sample.class);\nquery.where(criteriaBuilder.notEqual(model.get(entity.name), \xe2\x80\x9c\xe2\x80\x9d)).and(criteriaBuilder.notEqual(model.get(entity.name), null));\n
Run Code Online (Sandbox Code Playgroud)\n