我正在学习jpa-hibernate基础知识。
我有这个查询来获取所有用户:
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery();
cq.select(cq.from(Utente.class));
return getEntityManager().createQuery(cq).getResultList();
现在我想通过名为'ghost'的布尔字段进行过滤,其中它等于true(或者假,它取决于)。
翻译:
SELECT * FROM users WHERE ghost = 0;
我必须使用cq.where()吗?怎么样?
答案 0 :(得分:7)
是的,您必须使用cq.where()
。
尝试这样的事情:
Root<Utente> utente = cq.from(Utente.class);
boolean myCondition = true; // or false
Predicate predicate = cb.equal(utente.get(Utente_.ghost), myCondition);
cq.where(predicate);
我使用了应该自动生成的规范元模型类Utente_
。这避免了在键入字段名称时出错的风险,并增强了类型安全性。否则你可以使用
Predicate predicate = cb.equal(utente.get("ghost"), myCondition);