1. 概要

このクイックチュートリアルでは、JPQLまたはCriteriaAPIを使用してHibernateでテーブルからすべてのデータを取得する方法を見ていきます。

JPQLは、Criteria APIの使用がより動的で堅牢である一方で、より迅速で単純な実装を提供します。

2. JPQL

JPQL は、テーブルからすべてのエンティティを取得するためのシンプルで簡単な方法を提供します。

JPQLを使用してテーブルからすべての学生を取得することがどのように見えるかを見てみましょう。

public List<Student> findAllStudentsWithJpql() {
    return session.createQuery("SELECT a FROM Student a", Student.class).getResultList();      
}

HibernateセッションのcreateQuery()メソッドは、最初の引数として型付きクエリ文字列を受け取り、2番目の引数としてエンティティの型を受け取ります。 getResultList()メソッドを呼び出してクエリを実行します。このメソッドは、型指定されたListとして結果を返します。

シンプルさがこのアプローチの利点です。JPQLはSQLに非常に近いため、記述と理解が容易です。

3. 基準API

Criteria API は、JPAクエリを構築するための動的なアプローチを提供します。

これにより、クエリ要素を表すJavaオブジェクトをインスタンス化することでクエリを構築できます。 また、多くの文字列の連結を排除するため、クエリが多くのオプションのフィールドから構築されている場合は、よりクリーンなソリューションになります。

JPQLを使用したすべて選択クエリを見たところです。 CriteriaAPIを使用して同等のものを見てみましょう。

public List<Student> findAllStudentsWithCriteriaQuery() {
    CriteriaBuilder cb = session.getCriteriaBuilder();
    CriteriaQuery<Student> cq = cb.createQuery(Student.class);
    Root<Student> rootEntry = cq.from(Student.class);
    CriteriaQuery<Student> all = cq.select(rootEntry);

    TypedQuery<Student> allQuery = session.createQuery(all);
    return allQuery.getResultList();
}

まず、 CriteriaBuilder を取得します。これを使用して、型指定された Criteria Queryを作成します。 後で、クエリのルートエントリを設定します。 最後に、 getResultList()メソッドを使用して実行します。

現在、このアプローチは以前に行ったものと似ています。ただし、Java言語に完全にアクセスして、クエリを作成する際のニュアンスを明確にすることができます。

類似していることに加えて、JPQLクエリとJPA基準ベースのクエリは同等のパフォーマンスを発揮します。

4. 結論

この記事では、JPQLまたはCriteriaAPIを使用してテーブルからすべてのエンティティを取得する方法を示しました。

この例の完全なソースコードは、GitHubから入手できます。