🍇
JPAの@ManyToOneとは
@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
Discussion