2

SQL、Hibernate Query Language、および Hibernate の Criteria API を選択するのはどのような場合ですか?

4

2 に答える 2

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よりも少し高速です。しかし、このパフォーマンスの低下は、得られる利点に対して十分に価値があります。

お役に立てれば。

于 2015-12-04T05:11:16.753 に答える
1

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 を使用します。

于 2015-12-04T05:05:40.380 に答える