JPA Kotlin プログラミング 開発ノウハウ

Kotlin + JPAでの複合主キーの定義方法

投稿日:

Pexels / Pixabay

こんにちは、mabuiです。
JPAでは推奨されていないみたいですが、サロゲートキーを使用しない、
ナチュラルキーのみの中間テーブルの作り方の紹介です。

 

テーブル定義

例えばwebサービスに良くあるような、お気に入りのページをストックする機能を作る場合、
お気に入り情報のエンティティを下記のようにテーブル定義します。

page_idとuser_idは多対多の関係性です。
お気に入り情報の追加と削除機能を実装する場合、
お気に入り削除時に、データ量削減のためレコードを削除するとします。
この時にサロゲートキーを使用していると、キーの値が飛び飛びになり、
なんか気持ち悪いです。

 

複合主キーの定義

そこで複合主キーの定義を行うわけですが、
JPAで主キーを指定する@id アノテーションは複合主キーでは使用できないため、
下記のようにエンティティクラスの実装を行います。

複合主キーにしたいフィールドをFavoritePKクラスとして、
@Embeddableを使って単一のフィールドにします。
Favoriteクラスには、FavoritePKのフィールドを@EmbeddedIdでid指定します。
これで、記事の最初に乗っけたテーブル定義にマッピングできます。

ちなみに、テーブルアクセス時にJPAのRepositoryインターフェースを使用する場合は、
FavoritePKのインスタンスを生成し、それを引数に使用します。

 

-JPA, Kotlin, プログラミング, 開発ノウハウ
-,

Copyright© , 2024 All Rights Reserved Powered by STINGER.