kikki's tech note

技術ブログです。UnityやSpine、MS、Javaなど技術色々について解説しています。

JPAで外部参照のカラムを検索条件とする方法

Spring Bootでデータベースを操作するためのライブラリとして、Spring DATA JPAがあります。今回は、外部参照を含むテーブルに対して、検索条件を指定する方法について共有します。

はじめに

Spring DATA JPAは、以下記事で詳細に説明されている通り、JpaRepositoryインタフェースを継承したクラスに、WHERE句やORDER BY句を含む条件を記載することで、多種多様な検索クエリを記述できます。
Spring Data JPA - Reference Documentation

強みとしては、実行時に評価されるのではなく、事前にコンパイルしてクエリが正しいかを確認できること。
一方で弱みとしては、検索条件が多くなると、メソッド名が長くなり、一見での判断が難しくなることがあります。

サンプル

では実際に、外部参照を含むテーブル構成に対する条件の記載方法について確認します。
まず、テーブル構成を表したEntityクラスです。顧客(Customer)テーブルの中に外部参照としてユーザ(User)テーブルが含まれます。なお本サンプルでは、外部参照のキーとしてカラム名「id」が参照されます。

@Entity
class Customer {

  private User user;

  private String work;

  private DateTime createdDate;

}

@Entity
class User {
  private String firstName;

  private String lastName;

  private int age
}

次に、データベースを検索するRepositoryクラスについて、例を示します。

@Repository
public interface CustomerRepository extends JpaRepository<Customer, Long> {

  List<Customer> findbyUserLastNameAndWork(String lastname, String work);
}

注目点は、「User」クラスの「lastName」メンバを検索条件とするために、「Customer」クラスに含まれる「user」メンバを指定した後に、「User」クラスの「last」メンバを指定している点です。外部参照元のメンバ名を指定することで、外部参照先のカラムを検索条件とすることができます。本サンプルから分かるように、文字列でクエリを記述していないため、見た目もすっきりとします。

筆休め

Spring Bootでは、Spring DATA JPAを利用することで、SQL文を直接記述することなく、データベースを操作できます。
また、コンパイル時にRepositoryの記述内容にチェックが行われるので、安全に利用できることが非常に利点になります。

以上、「JPAで外部参照のカラムを検索条件とする方法」でした。


※無断転載禁止 Copyright (C) kikkisnrdec All Rights Reserved.