SQL、Hibernate Query Language、および Hibernate の Criteria API を選択するのはどのような場合ですか?
2 に答える
条件クエリは、動的クエリの作成に適しています。たとえば、パラメータの値に応じて、順序付けを動的に追加したり、一部 (制限など) を除外したりする方がはるかに簡単です。
基準クエリは、文字列としてではなくクエリ要素を表す Java オブジェクトのインスタンス化によって定義されます。これの利点は、コンパイル時にエラーを検出できることです。基準クエリはタイプセーフです
HQLクエリは、SQL と同様に文字列として定義されます。HQLは理解しやすく読みやすいため、静的で複雑なクエリにはHQL を使用します。
また、 HQLはデータベースのテーブルに依存しません。テーブル名の代わりに、HQL でエンティティ名を使用できます。そのため、データベースに依存しないクエリ言語として使用できます。
@Entity(name="MyEntityName") @Table(name="MyEntityTableName") class MyEntity { //A table with name MyEntityTableName is created and the entity name is MyEntityName. //Your JPQL/HQL query would be : select * from MyEntityName
これらは両方とも、アプリケーションを SQL から切り離すことを可能にします。SQL 構文は、データベース ベンダー (Oracle、MySQL など) によって異なる場合があります。したがって、基礎となるデータベースを変更したい場合、影響はありません (または最小限の影響)。
ベンダー固有の最適化された SQL 機能を利用できる場合がありますが、それらは ANSI に準拠していません。Hibernate などの ORM ツールは、最適化されたソリューションを提供しながら、それらを処理する責任を負います。
JDBC を使用したSQLクエリは、 Criteria クエリや HQLよりも少し高速です。しかし、このパフォーマンスの低下は、得られる利点に対して十分に価値があります。
お役に立てれば。
HQL - ほとんどのクエリに適合し、読み書きが簡単です。
Criteria - クエリを書きたくない場合は、Criteria API を使用できます。元:-
SELECT * FROM employee WHERE emp_id =1
基準クエリは
Criteria criteria = session.createCriteria(Employee.class)
.add(Restrictions.eq("id", new Integer(1));
すべての従業員を取得する
List customers = criteria.list();
その API 以外に、ページネーション、最大行 ID、子オブジェクトの選択などを提供します。
SQL - 他の 2 つの API は自分の仕事に合わないので、ネイティブ SQL を使用します。