カテゴリ: Spring 更新日: 2026/05/30

SpringのCriteriaBuilderとcreateTupleQueryの使い方を徹底解説!初心者でもわかる動的クエリ作成

CriteriaBuilderのcreateTupleQueryメソッド
CriteriaBuilderのcreateTupleQueryメソッド

先生と生徒の会話形式で理解しよう

生徒

「Springで特定の項目だけを選択するクエリを簡単に作る方法ってありますか?」

先生

「ありますよ。CriteriaBuildercreateTupleQueryメソッドを使うと、柔軟に特定の項目だけを選択するクエリを作成できます。」

生徒

「それは普通のクエリとどう違うんですか?」

先生

「通常のクエリはエンティティ全体を返しますが、createTupleQueryを使えば、必要な項目だけを選択して取得できます。サンプルコードを見てみましょう!」

1. CriteriaBuilderとcreateTupleQueryとは?

「1. CriteriaBuilderとcreateTupleQueryとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. CriteriaBuilderとcreateTupleQueryとは?
1. CriteriaBuilderとcreateTupleQueryとは?

CriteriaBuilderは、Springでデータベース操作を行う際に使われるJPAの機能の一つで、SQLを文字列で書かずにプログラムとして安全にクエリを組み立てるためのクラスです。特に、条件によって検索内容を変えたい「動的クエリ」を作る場面でよく使われます。

その中でもcreateTupleQueryメソッドは、複数の項目を自由に選択して取得できるのが特徴です。通常はエンティティ全体を取得しますが、この方法を使うと「必要なデータだけ」をピンポイントで取り出すことができます。

例えば、一覧画面で「名前と部署だけ表示したい」といった場合に便利で、無駄なデータを取得しないため処理速度の向上にもつながります。初心者の方は「必要な列だけSELECTする仕組み」とイメージすると理解しやすいでしょう。


CriteriaBuilder cb = em.getCriteriaBuilder();

// タプル形式のクエリを作成
CriteriaQuery<Tuple> query = cb.createTupleQuery();

// エンティティを指定
Root<Employee> root = query.from(Employee.class);

// 取得する項目を指定(名前と部署のみ)
query.multiselect(
    root.get("name"),
    root.get("department")
);

このように、取得したいフィールドだけを指定することで、シンプルかつ効率的なデータ取得が可能になります。まずは「必要な項目だけ取り出せる仕組み」として覚えておくと、後の理解がスムーズになります。

2. createTupleQueryの基本的な使い方

2. createTupleQueryの基本的な使い方
2. createTupleQueryの基本的な使い方

以下は、従業員テーブルから名前と部門だけを取得するcreateTupleQueryの基本的な使用例です。


import javax.persistence.*;
import javax.persistence.criteria.*;
import java.util.List;

public class TupleQueryExample {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("examplePU");
        EntityManager em = emf.createEntityManager();

        try {
            CriteriaBuilder cb = em.getCriteriaBuilder();

            // createTupleQueryでタプル形式のクエリを作成
            CriteriaQuery<Tuple> cq = cb.createTupleQuery();

            // ルートエンティティを設定
            Root<Employee> root = cq.from(Employee.class);

            // 必要なフィールドを選択
            cq.multiselect(
                root.get("name").alias("name"),
                root.get("department").alias("department")
            );

            // クエリの実行
            List<Tuple> results = em.createQuery(cq).getResultList();

            // 結果を出力
            results.forEach(tuple -> {
                System.out.println("Name: " + tuple.get("name") + ", Department: " + tuple.get("department"));
            });
        } finally {
            em.close();
            emf.close();
        }
    }
}

3. createTupleQueryの実行結果

3. createTupleQueryの実行結果
3. createTupleQueryの実行結果

上記のコードを実行すると、次のような形式で結果が出力されます。このように、名前と部門のみを効率的に取得することができます。


Name: John Doe, Department: Sales
Name: Jane Smith, Department: IT
Name: Bob Johnson, Department: HR

4. createTupleQueryを使うメリット

「4. createTupleQueryを使うメリット」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. createTupleQueryを使うメリット
4. createTupleQueryを使うメリット

createTupleQueryを使用することで、以下のようなメリットがあります:

  • 効率的なデータ取得:必要なフィールドだけを取得できるため、パフォーマンスの向上につながります。
  • 柔軟性:動的に選択フィールドを変更可能。
  • 型安全性:エイリアスを設定することで、結果のフィールド名を明確に指定できます。

5. 注意点

5. 注意点
5. 注意点

createTupleQueryを使用する際には、以下の点に注意してください:

  • エイリアスの設定:フィールドにエイリアスを付けないと、取得時にエラーが発生する場合があります。
  • エンティティのマッピング:エンティティが正しくマッピングされている必要があります。
  • クエリの最適化:取得するフィールドを最小限に抑え、必要以上のデータを取得しないようにしましょう。

6. まとめ

6. まとめ
6. まとめ

本記事では、SpringのCriteriaBuildercreateTupleQueryメソッドを使った動的クエリの作成方法について詳しく解説しました。CriteriaBuilderは型安全な方法でクエリを構築でき、createTupleQueryは特定の項目だけを柔軟に選択するのに最適です。

特に、エンティティ全体ではなく必要なフィールドだけを取得したい場合、この方法は非常に有効です。エイリアスの使用により、結果を明確に管理でき、データ取得の効率を向上させることができます。

実務では、複雑な条件や多くのフィールドが絡むクエリを扱うことが多いため、CriteriaBuildercreateTupleQueryの活用は、パフォーマンスの最適化とコードの可読性向上に寄与します。

以下に、別の応用例を示します。この例では、特定の条件を追加してデータを取得します。


import javax.persistence.*;
import javax.persistence.criteria.*;
import java.util.List;

public class TupleQueryWithCondition {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("examplePU");
        EntityManager em = emf.createEntityManager();

        try {
            CriteriaBuilder cb = em.getCriteriaBuilder();

            // createTupleQueryでタプル形式のクエリを作成
            CriteriaQuery<Tuple> cq = cb.createTupleQuery();

            // ルートエンティティを設定
            Root<Employee> root = cq.from(Employee.class);

            // 必要なフィールドを選択
            cq.multiselect(
                root.get("name").alias("name"),
                root.get("department").alias("department")
            );

            // 条件を追加
            cq.where(cb.equal(root.get("department"), "Sales"));

            // クエリの実行
            List<Tuple> results = em.createQuery(cq).getResultList();

            // 結果を出力
            results.forEach(tuple -> {
                System.out.println("Name: " + tuple.get("name") + ", Department: " + tuple.get("department"));
            });
        } finally {
            em.close();
            emf.close();
        }
    }
}

このコードでは、「Sales」部門に限定してデータを取得しています。以下は実行結果の例です。


Name: John Doe, Department: Sales
Name: Alice Johnson, Department: Sales
先生と生徒の振り返り会話

生徒

「今日はcreateTupleQueryを使った方法を学びました。特定のフィールドだけを効率的に取得できるんですね!」

先生

「その通りです。不要なデータを取得しないことでパフォーマンスを向上させることができます。」

生徒

「条件を追加してデータを絞り込むのも簡単でした。実務でも役立ちそうです!」

先生

「そうですね。次回は複数の条件やグループ化について学びましょう。」

この記事を読んだ人からの質問

「この記事を読んだ人からの質問」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

SpringのCriteriaBuilderとは具体的にどのような役割を持つクラスなのですか?初心者にもわかりやすく教えてください。

Spring FrameworkやJava Persistence API(JPA)において、CriteriaBuilderはプログラムのコードを使ってデータベースへの命令文(クエリ)を組み立てるための非常に重要なツールです。通常、データベースへの操作はSQLという言語を直接書くことが多いですが、CriteriaBuilderを使うことでJavaのメソッド呼び出しの形式でクエリを構築できます。これにより、文字列でクエリを書く際に発生しがちなタイピングミスや文法エラーを、プログラムのコンパイル時にチェックできる「型安全」な開発が可能になります。動的な条件分岐が必要な複雑な検索処理を実装する際、開発者にとって非常に心強い味方となるクラスです。
カテゴリの一覧へ
新着記事
New1
Java
JavaのStreamのmaxを完全解説!初心者でもわかる最大値の取得方法
新規投稿
New2
JSP
JSPで改行やスペースを正しく表示する方法!HTMLとの連携ポイントも解説
更新記事
New3
Spring
SpringのJpaRepositoryとsaveAndFlushの使い方を完全ガイド!初心者でもわかるデータ操作
更新記事
New4
Spring
Springの@Autowiredアノテーションの使い方を完全ガイド!初心者でもわかる依存性注入
更新記事
人気記事
No.1
Java&Spring記事人気No1
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.3
Java&Spring記事人気No3
JSP
JSPでCSSやJSを読み込む基本!外部ファイルのパス指定に注意しよう
No.4
Java&Spring記事人気No4
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.5
Java&Spring記事人気No5
JSP
JSPでフォームを表示して入力を受け取る基本手順をやさしく解説!初心者向けフォーム処理の入門ガイド
No.6
Java&Spring記事人気No6
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.7
Java&Spring記事人気No7
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.8
Java&Spring記事人気No8
Java
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得