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") |
テーブルのマッピングは双方のエンティティクラスで行う双方向と片側で行う単方向のマッピングがある
※単方向だと検索が複雑になるため双方向を推奨
簡単な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とかの複雑なクエリーを実行したい際は実装する必要がある