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

1概要

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

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

2 JPQL

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

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

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

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

  • 単純さがこのアプローチの利点です** JPQLはSQLに非常に近いため、記述および理解が容易です。

3基準API

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

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

JPQLを使用した全選択クエリを見たところです。 Criteria APIを使用して、それと同等のものを見てみましょう。

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();
}

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

さて、このアプローチは以前に行ったことと似ています。 しかし、それはクエリを定式化する際により大きなニュアンスを明確にするためにJava言語への完全なアクセスを私たちに与えます

類似していることに加えて、JPQLクエリとJPA基準ベースのクエリも同等に優れています。

4結論

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

この例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/hibernate5/src/main/java/com/baeldung/hibernate/findall[over GitHub]から入手できます。