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

新手上路,请多包涵

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

它仍然返回整个列表。

原文由 Crystal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 677
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));

原文由 Tom Taylor 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试使用此代码:

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

原文由 gfxfunclub 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏