My Javaアプリケーションは、オブジェクトの永続化にJPAを使用しています。ビジネスドメインは非常に単純です(それぞれ3〜5個のプロパティを持つ3つのクラスのみが永続的です)。クエリも単純です。どのアプローチを使用すべきか:JPQLまたはCriteria API?
SOでこれがすでに説明されていると確信していますが、既存の質問が見つかりませんでした。そこで、質問に対する私の見解を以下に示します。
これは基本的に Hibernate:Criteria vs. HQL にあります。
ただし、JPA 2.0 Criteria APIとHibernateのCriteria APIには、言及する価値のある大きな違いが1つあります。JPA2.0 Criteria APIはtypesafe APIであり、したがって、コンパイル時のチェック、コード補完、より良いリファクタリングのサポートなどを提供します。ただし、[〜#〜] i [〜#〜]は見つかりませんJPQLの使いやすさよりも利点が重要であること。
要約すると、動的なクエリ(複数条件検索機能など)を除き、JPQLを優先します。
以前に同様の質問に回答しましたが、コミュニティの利益のためにここに回答を再投稿します。以下の回答に対して、アプリケーションサーバーを使用していると仮定します。
Criteria APIは、SQLインジェクションを防ぐタイプセーフな方法で動的SQLクエリの構築を可能にするために存在します。それ以外の場合は、エラーが発生しやすくセキュリティ上のリスクがあるSQL文字列を連結することになります。つまり、SQLインジェクションです。 Criteria APIを使用する必要があるのは、このときだけです。
クエリは基本的に同じままですが、異なるパラメーターのみを受け入れる必要がある場合は、アノテーション付きの@NamedQueriesを使用する必要があります。
これは基本的に、基準クエリと@NamedQueriesに関する経験則です。私の経験では、Criteria APIを必要とすることはめったにありませんが、まれに必要な場合にのみ存在するのは良いことです。
お役に立てれば。