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」メンバを指定している点です。外部参照元のメンバ名を指定することで、外部参照先のカラムを検索条件とすることができます。本サンプルから分かるように、文字列でクエリを記述していないため、見た目もすっきりとします。