EJB3 エンティティで Criteria クエリを使用できますか? もしそうなら、どうすればそれらを EntityManager と組み合わせることができますか?
3 に答える
JPA 2.0 で導入された新機能の 1 つは Criteria API です。JPA2 実装のいずれかが必要です。
- Hibernate 3.5が JPA2 をサポートするようになりました
- EclipseLink (参照 JPA2 実装)
- アパッチ OpenJPA 2.0
基準クエリは、EntityManager.getCriteriaBuilder() を介してアクセスされ、通常のクエリ API を介して実行されます。
EntityManager em = ...;
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Employee> query = qb.createQuery(Employee.class);
Root<Employee> employee = query.from(Employee.class);
query.where(qb.equal(employee.get("firstName"), "Bob"));
List<Employee> result = em.createQuery(query).getResultList();
JPA 2 (クライテリア API を提供) は、JSR 220 (元の EJB/JPA 仕様) の後継と見なすことができる JSR 317 で定義されました。したがって、あなたのコメントは「本当です。しかし、それは質問の内容である JPA 1.0/EJB 3.0 の一部ではありません。」すべての一般的なアプリケーション サーバー (WebLogic、JBOSS、Glassfish など) で JPA 2 を互換的に使用できるため、これは重要ではありません。グリーン フィールド プロジェクトでは JPA 2.0 以降を使用します。多くのプロジェクトが JPA 1 を使用して実装されていますが、ほとんどの企業は JPA 1 フレームワークを置き換える過程にあります。
JPA は、Hibernate のような Criteria API を提供しません。ただし、EJB3 Persistence 用の Hibernate Criteria API 設計に基づく API を提供するライブラリであるejb3criteriaを使用できます。ejb3criteria は、任意の EJB3 Persistence 実装で使用できます。