Spring Data JPAでカスタムRepositoryインターフェースを実装する方法




どうも高妻です。Twitterでもプログラミングのことや暗号通貨のことをつぶやいているのでよかったら覗きにきてください。  

Spring Data JPAとは

JPA(Java Persistence API)はHibernateを基盤としたSpringに最初から導入されているORMのことです。

JPAの実装には下記のように非常に多くの実装方法があり用途に合わせて実装方法を変える必要があります。

  • Criteria API
  • 名前付きクエリー:NamedQuery, NamedNaticeQueryアノテーションによる実装
  • ネイティブSQL:createNativeQueryメソッドで実装
  • メソッドの命名規則に応じたSQLを生成してくれる:シンプルなクエリはほぼこの方法で可能
  • カスタムRepositoryインターフェースを利用した実装(カスタムRepositoryインターフェースと呼ぶかは不明)

今回はカスタムRepositoryインターフェースの実装方法とそのときに気をつけないといけないことを説明します。

カスタムRepositoryインターフェースの実装方法

今回は説明の都合上、Personというエンティティを対象に実装方法の説明をします。

準備するファイル

  • PersonRepository(エンティティ名+Repository)
  • PersonRepositoryCustom(エンティティ名+Repository+Custom)
  • PersonRepositoryImp(エンティティ名+Repository+Impl)

このとき注意することとしてファイル名の規則は間違わないようにしないといけません。自分はこの規則を知らずに勝手につけていたら下記エラーになりかなりの時間を浪費してしまいました。エラーからだとなぜプロパティ名が参照できないのか全く推測できないので気をつけてください。

 

PersonRepository(Kotlin実装)

定義したカスタムインターフェースを継承させるだけです。

 

PersonRepositoryCustom(Kotlin実装)

実装したいメソッドを定義するだけの普通のインターフェースです。

 

PersonRepositoryImp(Kotlin実装)

カスタムインターフェースを継承してメソッドの中身を実装するだけです。

簡易的にEntityManagerFactoryのDIやcreateNativeQueryの箇所は大雑把に簡略化させていただいています。

まとめ

JPAはいろんな実装方法があり混乱してしまうので初学者にとっては非常に難しく感じると思います。個人的にはこんなにいっぱい実装方法を準備している時点で微妙なフレームワークだなと感じています。

上記で紹介したエラーは下記投稿を見つけて解決できたのでもし同じような方がいたら一読するのをお勧めします。

https://stackoverflow.com/questions/20777785/org-springframework-data-mapping-propertyreferenceexception-no-property-catch-f

おすすめ書籍

JPAに関しては下記パーフェクトJava EEが非常に詳しく書かれているのでぜひ読んでみてください。







コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です