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

SpringのCriteriaBuilderとascメソッドの使い方を徹底解説!初心者でもわかる昇順ソート

CriteriaBuilderのascメソッド
CriteriaBuilderのascメソッド

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

生徒

「Springでデータを昇順に並べる方法はありますか?」

先生

「はい、CriteriaBuilderクラスのascメソッドを使えば、簡単に昇順ソートができますよ。」

生徒

「具体的にはどのように使うんですか?」

先生

「それでは、実際にascメソッドを使ったコードを見てみましょう!」

1. CriteriaBuilderとascメソッドとは?

1. CriteriaBuilderとascメソッドとは?
1. CriteriaBuilderとascメソッドとは?

CriteriaBuilderは、Springが提供するJPA(Java Persistence API)の一部で、型安全な動的クエリを作成するためのクラスです。ascメソッドは、指定したフィールドを昇順で並べ替えるためのメソッドです。

通常のクエリでORDER BY句を使用する代わりに、CriteriaBuilderのascを使うことで、動的かつ型安全にソートを実現できます。

2. ascメソッドの基本的な使い方

2. ascメソッドの基本的な使い方
2. ascメソッドの基本的な使い方

以下の例では、従業員テーブルから「名前」を昇順に並べて取得する方法を解説します。


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

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

        try {
            CriteriaBuilder cb = em.getCriteriaBuilder();
            CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);
            Root<Employee> root = cq.from(Employee.class);

            // 昇順ソートを指定
            cq.select(root).orderBy(cb.asc(root.get("name")));

            List<Employee> results = em.createQuery(cq).getResultList();

            for (Employee employee : results) {
                System.out.println("Name: " + employee.getName());
            }
        } finally {
            em.close();
            emf.close();
        }
    }
}

3. ascメソッドの実行結果

3. ascメソッドの実行結果
3. ascメソッドの実行結果

上記のコードを実行すると、従業員の「名前」が昇順で並べ替えられて出力されます。以下は実行結果の例です。


Name: Alice Johnson
Name: Jane Smith
Name: John Doe

4. ascメソッドを使うメリット

4. ascメソッドを使うメリット
4. ascメソッドを使うメリット

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

  • 動的なソート:実行時にソート条件を柔軟に変更可能。
  • 型安全性:クエリ内で指定するフィールドが型安全に管理される。
  • 読みやすさ:コード内でソート条件を明確に記述できる。

この方法は、検索条件に応じてソート順を動的に変更する必要がある場面で非常に便利です。

5. 注意点

5. 注意点
5. 注意点

ascメソッドを使用する際には、以下の点に注意してください:

  • フィールドの型:ソートするフィールドの型に応じて動作が異なる場合があります。
  • null値の扱い:null値の並べ替え順序はデータベースの設定に依存します。
  • 複数条件のソート:複数フィールドでソートする場合は、orderByメソッドに複数の条件を指定できます。

6. 複数のカラムで昇順ソートする方法

6. 複数のカラムで昇順ソートする方法
6. 複数のカラムで昇順ソートする方法

実務では「部署ごとに並べた後、さらに名前順で並べる」といった、複数の条件でソートしたい場面が多くあります。orderByメソッドには、カンマ区切りで複数のOrderオブジェクトを渡すことができます。

以下の例では、まず「部署名」で昇順に並べ、同じ部署内では「入社日」の古い順(昇順)に並べ替えています。


// 複数の昇順条件を指定
cq.select(root).orderBy(
    cb.asc(root.get("department")),
    cb.asc(root.get("hireDate"))
);

List<Employee> results = em.createQuery(cq).getResultList();

このように記述することで、SQLのORDER BY department ASC, hire_date ASCと同じ結果を得ることができます。

7. ascとdescを組み合わせて使う

7. ascとdescを組み合わせて使う
7. ascとdescを組み合わせて使う

CriteriaBuilderでは、昇順のascメソッドだけでなく、降順を指定するdescメソッドも用意されています。これらを組み合わせることで、より高度な並べ替えが可能です。

例えば、「給与が高い順(降順)に並べ、同じ給与の場合は名前のアルファベット順(昇順)にする」といった指定は以下のようになります。


// 降順(desc)と昇順(asc)の組み合わせ
cq.select(root).orderBy(
    cb.desc(root.get("salary")),
    cb.asc(root.get("name"))
);

メソッドを使い分けるだけで、複雑なソート順も型安全に、かつ直感的に組み立てることができます。

8. 動的なソート条件の切り替え

8. 動的なソート条件の切り替え
8. 動的なソート条件の切り替え

CriteriaBuilderを利用する最大のメリットは、プログラムの条件分岐によってソート順を動的に変更できる点です。ユーザーが画面上で選択した項目に合わせて、ソート対象のフィールドを切り替える実装を見てみましょう。


String sortField = "name"; // 本来は画面等から渡される変数
boolean isAscending = true;

Order order;
if (isAscending) {
    order = cb.asc(root.get(sortField));
} else {
    order = cb.desc(root.get(sortField));
}

cq.select(root).orderBy(order);

JPQLのように文字列を連結してクエリを作る必要がないため、タイポによるミスを防ぎつつ、柔軟な検索・ソート機能を実装することができます。

まとめ

まとめ
まとめ

今回は、SpringのCriteriaBuilderクラスにおけるascメソッドの使い方について解説しました。 ascメソッドは、指定したフィールドを昇順で並べ替えるために使用され、型安全性を確保しながら動的にソート条件を設定できる点が特徴です。 ソートの条件をプログラム内で柔軟に設定することで、静的なSQLよりも柔軟性と保守性を向上させることができます。

また、CriteriaQueryと組み合わせることで、クエリ全体を型安全に構築し、検索結果の処理を簡単に行うことができました。 これにより、コードの読みやすさや拡張性が向上します。複数の条件でソートを実施したい場合や、 実行時に動的に条件を変更する場合にも非常に有用です。

以下に、複数条件を用いたソートの例を示します。


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

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

        try {
            CriteriaBuilder cb = em.getCriteriaBuilder();
            CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);
            Root<Employee> root = cq.from(Employee.class);

            // 昇順と降順を組み合わせたソート
            cq.select(root).orderBy(
                cb.asc(root.get("department")),
                cb.desc(root.get("salary"))
            );

            List<Employee> results = em.createQuery(cq).getResultList();

            for (Employee employee : results) {
                System.out.println("Name: " + employee.getName() +
                                   ", Department: " + employee.getDepartment() +
                                   ", Salary: " + employee.getSalary());
            }
        } finally {
            em.close();
            emf.close();
        }
    }
}

上記のコードでは、departmentを昇順に並べ、同一部門内ではsalaryを降順でソートする方法を示しています。

先生と生徒の振り返り会話

生徒

「ascメソッドを使うと、簡単に昇順で並べ替えられるのはわかりました。でも、複数の条件でソートする場合はどうすればいいですか?」

先生

「いい質問ですね!複数条件のソートは、orderByメソッドに複数のOrderオブジェクトを渡すことで簡単に実現できます。さっきの例では、部門を昇順、給与を降順で並べ替えました。」

生徒

「なるほど!ascやdescを組み合わせることで、柔軟に並べ替えができるんですね。」

先生

「そうです。条件を自由に設定できるので、実務でも役立つ場面が多いですよ。」

生徒

「ありがとうございました!実際にコードを書いて試してみます!」

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

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

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

Spring FrameworkのCriteriaBuilderとは何ですか?初心者にもわかりやすく教えてください。

Spring Frameworkにおいて、CriteriaBuilder(クライテリアビルダー)とは、JPA(Java Persistence API)の一部として提供されている非常に便利なクラスです。主な役割は、プログラムの実行中に動的にデータベースクエリを作成することにあります。初心者の方向けに簡単に説明すると、SQL文を文字列として直接書くのではなく、Javaのメソッドを組み合わせてクエリ(命令)を組み立てるための「ツールボックス」のようなものです。これを使うことで、型安全(タイプセーフ)なクエリを作成でき、コンパイル時にエラーを検知しやすくなるという大きなメリットがあります。

CriteriaBuilderのascメソッドは何のために使われるものですか?

CriteriaBuilderのascメソッドは、データベースから取得したデータを「昇順(小さい順、あるいは五十音順)」に並べ替える(ソートする)ために使用されます。SQLでいうところの「ORDER BY フィールド名 ASC」と同じ役割を果たします。例えば、従業員リストを名前のあいうえお順に並べたり、日付を古い順から並べたりする際に、このascメソッドを指定することで、システムが自動的に並べ替え処理を行ってくれるようになります。プログラミング初心者がデータを整理して表示したいときには欠かせないメソッドの一つです。
生成AIを基礎から学びたい方へ

ChatGPTなどの生成AIをこれから学びたい方に向けて、AIスキルアカデミーの口コミ・評判、料金、無料セミナーの内容を詳しくまとめています。

AIスキルアカデミーの口コミ・評判を詳しく見る
カテゴリの一覧へ
新着記事
New1
Java
JavaのassertFalseとは?JUnit5のAssertionsクラスを初心者向けにわかりやすく解説
新規投稿
New2
Thymeleaf
ThymeleafでDBから取得したデータを編集フォームの初期値にセットする方法!Entity連携を初心者向けに解説
新規投稿
New3
Spring
JavaのSpringで使う@FutureOrPresentアノテーションを完全ガイド!初心者でもわかる日付バリデーション
新規投稿
New4
Java
JavaのLocalDateクラスのgetMonthValueメソッド完全ガイド!初心者でもわかる数値で月を取得する方法
新規投稿
人気記事
No.1
Java&Spring記事人気No1
Servlet
JavaサーブレットのdoPostメソッドとは?初心者向けにやさしく解説!
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpServletResponseクラスを初心者向けに徹底解説!
No.3
Java&Spring記事人気No3
Servlet
JavaのHttpServletRequestWrapperとgetSessionメソッドの使い方を徹底解説!初心者向けServletのセッション管理入門
No.4
Java&Spring記事人気No4
Servlet
JavaのServletExceptionクラスを初心者向けに徹底解説!
No.5
Java&Spring記事人気No5
Servlet
JavaのHttpSessionインターフェースとgetSessionContextメソッドを徹底解説!初心者でもわかるセッション管理の基本
No.6
Java&Spring記事人気No6
Java
JavaのStringクラスとlengthメソッドを完全解説!初心者でも理解できる文字列の長さ取得の使い方
No.7
Java&Spring記事人気No7
Servlet
JavaのHttpSessionAttributeListenerとattributeRemovedメソッドの使い方を徹底解説!初心者でもわかるセッション属性の削除と監視
No.8
Java&Spring記事人気No8
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎