2

findAllSession bean的 Abstract 方法的默认生成代码是这样的:

public List<T> findAll() {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    return getEntityManager().createQuery(cq).getResultList();
}

我们能否以同样的方式创建另一个方法,它可以找到所有记录,WHERE status ='1'

如何?

4

2 回答 2

4

你需要使用 cq.where()

CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery();
Root<T> c = cq.from(entityClass);
cq.select(c);
cq.where(cb.gt(c.get("status"), 1));
return getEntityManager().createQuery(cq).getResultList();
于 2012-07-05T03:55:25.297 回答
0

我最近遇到了同样的问题,所以,虽然它可能与 OP 不再相关,但我会发布一个答案。也许它可以帮助别人。

CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery();
Root<T> c = cq.from(entityClass);
cq.select(c);
cq.where(cb.equal(c.get("status"), 1));
return getEntityManager().createQuery(cq).getResultList();

如您所见,与@dgregory 的答案的唯一区别在于这一行:

cq.where(cb.equal(c.get("status"), 1));

@dgregory 使用的函数gt()而不是equal()测试它的第一个参数是否大于第二个参数,这意味着参数必须是numbers。但是,您数据库中的状态列显然是char,因此会引发异常。此异常的含义是不存在第一个参数为 char 的 gt() 方法,尽管此方法存在于数字第一个参数中。

更不用说,即使存在这样的方法,这也不是您对查询的期望。

于 2013-05-28T03:40:26.600 回答