3

我正在学习 jpa-hibernate 基础知识。

我有这个查询来获取所有用户:

CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
        CriteriaQuery cq = cb.createQuery();
        cq.select(cq.from(Utente.class));
        return getEntityManager().createQuery(cq).getResultList();

现在我想通过一个名为“ghost”的布尔字段进行过滤,它等于 true(或 false,这取决于)。

翻译:

SELECT * FROM users WHERE ghost = 0;

我必须使用 cq.where() 吗?如何?

4

1 回答 1

8

是的,您必须使用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);
于 2012-05-14T10:31:45.687 回答