Hibernateを使ってテーブルからすべてのデータを取得する

Hibernateを使用してテーブルからすべてのデータを取得する

1. 概要

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

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

2. JPQL

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

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

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

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

Simplicity is the advantage of this approach. JPQLはSQLに非常に近いため、記述と理解が容易です。

3. 基準API

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

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

JPQLを使用した全選択クエリを見ました。 CriteriaAPIを使用して同等のものを見てみましょう。

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

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

まず、型付きのCriteriaQueryを作成するために使用するCriteriaBuilderを取得します。 後で、クエリのルートエントリを設定します。 そして最後に、getResultList()メソッドで実行します。

さて、このアプローチは以前に行ったものと似ています。 But, it gives us complete access to the Java language to articulate greater nuance in formulating the query.

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

4. 結論

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

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