Spring Data JPA

hibernate-core

One to One

  • Join Table(関連(かんれん) テーブル)と()() わせ: (ふた) つのエンティティがそれぞれ独立(どくりつ) した(しゅ) キーを()場合(ばあい)使用(しよう)柔軟性(じゅうなんせい)(たか)利点(りてん) がありますが、追加(ついか)関連(かんれん) テーブルの維持(いじ)必要(ひつよう)

  • Foreign Key(外部(がいぶ) キー)と()() わせ: (もっと)一般的(いっぱんてき)方法(ほうほう)(ひと) つのエンティティの(しゅ) キーが(べつ) のエンティティへの外部(がいぶ) キーとしても機能(きのう)追加(ついか)関連(かんれん) テーブルを回避(かいひ) し、(つよ)結合(けつごう)確立(かくりつ)

  • Shared Primary Key(共有(きょうゆう) (しゅ) キー): (ふた) つのエンティティが完全(かんぜん)(おな)(しゅ) キー()共有(きょうゆう)(もっと)(つよ)一対一(いったいいち) マッピング方式(ほうしき) ですが、柔軟性(じゅうなんせい)(ひく) い。

  • 関連(かんれん) テーブル方式(ほうしき)柔軟性(じゅうなんせい)(たか) いですが、パフォーマンスはやや(おと) ります。
  • ほとんどの場合(ばあい)外部(がいぶ) キー方式(ほうしき) (Foreign Key) がデフォルトの最良(さいりょう)選択(せんたく) です。
  • (しゅ) キーが完全(かんぜん)(おな) じである必要(ひつよう) がある場合(ばあい) のみ共有(きょうゆう) (しゅ) キーを検討(けんとう)

共有(きょうゆう) (しゅ) キーの(れい) (Shared Primary Key)

  • 両方(りょうほう)@OneToOne付与(ふよ) し、一方(いっぽう)@MapsId使用(しよう)
  • エンティティクラスの(れい)
    • products ((おや) )
    • products_details (()(おや)(しゅ) キーを共有(きょうゆう) )

外部(がいぶ) キー方式(ほうしき)(れい) (One to One with Foreign Key)

Lazy & Eager Load

  • Lazy (遅延(ちえん) ロード): 関連(かんれん) プロパティに実際(じっさい) にアクセスしたときにのみ SQL クエリを発行(はっこう)
  • Eager (即時(そくじ) ロード): 主体(しゅたい) のクエリ() に Join で関連(かんれん) データも取得(しゅとく)

Many to Many

  erDiagram
	student ||--|{ students_courses : has
	course ||--|{ students_courses : has

JPA Entity Life Cycle

  1. New / Transient: (あたら) しく作成(さくせい) されたオブジェクト、まだ(しゅ) キー ID を() たず、Persistence Context に管理(かんり) されていない。
  2. Managed: 永続化(えいぞくか) され、コンテナに管理(かんり) されている。オブジェクトへの変更(へんこう) はトランザクションコミット() にデータベースに同期(どうき)
  3. Detached: オブジェクトは ID を() つが、コンテナ管理(かんり) から(はな) れている(トランザクション終了(しゅうりょう)手動(しゅどう) detach など)。
  4. Removed: 削除(さくじょ) としてマークされ、トランザクションコミット() にデータベースから削除(さくじょ)
  flowchart TB
	nt[New/Transient]
	d[Detached]
	m[Managed]
	r[Removed]
	db((database))

	nt -->|persist, save| m
	m -->|detach, evict, clear, close| d
	m -->|remove| r
	m -->|flush| db
	d -->|merge| m
	r -->|persist| m
	r -->|flush| db

JPA vs Spring Data JPA vs Hibernate

  flowchart LR
	SDJPA[Spring Data JPA]
	JPA[JPA]
	subgraph Hibernate
	JDBC[JDBC]
	end
	DB[Database]

	SDJPA <--> JPA <--> Hibernate <--> DB
項目(こうもく)説明(せつめい)
JPA仕様(しよう)標準(ひょうじゅん) )。ORM 標準(ひょうじゅん)定義(ていぎ)
Hibernate実装(じっそう) 。JPA の(もっと)一般的(いっぱんてき) なプロバイダ。
Spring Data JPA抽象化(ちゅうしょうか) レイヤー。DAO ボイラープレートコードを削減(さくげん)