2

findAllセッション 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));

equal()の代わりに @dgregory で使用される関数gt()は、最初の引数が 2 番目の引数より大きいかどうかをテストします。これは、引数がnumbers でなければならないことを意味します。ただし、データベースのstatus列は明らかにcharであるため、例外がスローされます。この例外の意味は、最初の引数が char である gt() メソッドが存在しないということです。ただし、このメソッドは数値の最初の引数で存在します。

言うまでもなく、そのようなメソッドが存在したとしても、これはクエリから期待したものではありません。

于 2013-05-28T03:40:26.600 に答える