🍇

JPAの@ManyToOneとは

2022/04/16に公開

@ManyToOne(多対一)

属性 説明 ディフォルト値
optional falseに設定すると連関関係であるエンティティが常にある必要がある。 true
fetch fetch戦略を決める FetchType.EAGER
cascade persistenceの遷移機能
targetEntity type情報を設定する、ほとんど使わない

@ManyToOne片方向

  • 一番多く使われてるリレーショナルマッピング
  • ManyToOneの反対はOneToMany
  • Memberが多(Many)でTeamが一(One)の関係
  • 多(Many)から外来キー(FK)を管理する。
Member.java
@Entity
@Table(name = "member")
@Getter @Setter
public class Member {
    @Id
    private Long id;
    private String name;
    @ManyToOne
    @JoinColumn(name = "team_id") // FKを管理する
    private Team team;
}
  • 片方向なのでTeam側にはmappedByとか何もついてない
Team.java
@Entity
public class Team {
    @Id
    private Long id;
    private String name;
}

@ManyToOne両方向

  • FKがある所がリレーションのオーナーになる
  • オブジェクトをお互い参照させて開発する時使う
  • オーナーではない反対側はreadOnly(読み取り専用)になる。
Member.java
@Entity // JPAが管理するオブジェクト
@Table(name = "member")
@Getter @Setter
public class Member {
    @Id
    private Long id;
    private String name;

    @ManyToOne
    @JoinColumn(name = "team_id")
    private Team team;
}
Team.java
@Entity
public class Team {
    @Id
    private Long id;
    private String name;

    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<>();
}

(次)@OneToMany

https://zenn.dev/dev_yoon/articles/9b1a46bb95d168

Discussion