ほげほげ

foooooooooobaaaaaaaaaaaaaaaar

JPAメモ

JPAとは

Java Persistence API のこと。
RDBへのアクセスを行うためのフレームワークで、データの永続化の機能を提供する。
対象のオブジェクトを保存するとそのオブジェクトがそのままDBに保存される。
裏側ではDBアクセスが行われているが、あまり意識しなくて良くなる。
複雑なクエリーが勝手に裏で発行されていることもあるので要注意

エンティティクラス

DBのテーブルと関連づけられるクラスのこと。
JPAでDBのレコードを扱う際にエンティティと呼ばれるクラスを定義して使用する。

エンティティクラスで使用するアノテーション

javax.persistenceパッケージを使用する
こちらがわかりやすい:http://itdoc.hitachi.co.jp/manuals/link/cosmi_v0870/APR4/EU260052.HTM

区分 アノテーション 概要 使用方法
エンティティ @Entity クラスがエンティティであることを示す クラス名に付与
カラム @Column テーブルのカラムとエンティティクラスのプロパティを関連づける @Column(table = "person", name = "name")
カラム @JoinColumn 結合内容を示す。nameでどのカラムで結合するのか指定できる @JoinColumn(name = "test")
ID関連 @Id そのエンティティのPKであることを示す PKとなるプロパティに付与
ID関連 @GeneratedValue PKのプロパティに併せて指定する。PKを自動生成する(生成方法は複数ある) PKとなるプロパティに付与 @GeneratedValue(strategy = GenerationType.|AUTO|IDENTITY| SEQUENCE|TABLE)
リレーション @ManyToOne 多対一の関連を示す プロパティに付与
リレーション @OneToMany 一対多の関連を示す。マップ対象のテーブルをmappedByで示す プロパティに付与 @OneToMany(mappedBy = "department")

f:id:notempty:20220313225021p:plain

テーブルのマッピングは双方のエンティティクラスで行う双方向と片側で行う単方向のマッピングがある
※単方向だと検索が複雑になるため双方向を推奨

簡単なCRUD操作

インタフェース JpaRepository の実装クラスを作成する

public interface 名前 extends JpaRepository <エンティティ , ID>

IDには基本型を指定するのではなくラッパーを指定すること(Longとか) 実装クラスにはリポジトリであることを示す@Repositoryを付与すること。
インタフェースには簡単なクエリーが実装されており(select * とかinsert intoとか)、以下で確認できる
https://spring.pleiades.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html
UNIONとかJOINとかの複雑なクエリーを実行したい際は実装する必要がある