双方向関連および関連関係の所有者
リファレンス
双方向マッピング
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String name;
// @Column(name = "TEAM_ID")
// private Long teamId;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Team getTeam() {
return team;
}
public void setTeam(Team team) {
this.team = team;
}
}
@Entity
public class Team {
@Id @GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Member> getMembers() {
return members;
}
public void setMembers(List<Member> members) {
this.members = members;
}
}
実際、客体には双方向の関連関係はありません.2つの一方向関係があるテーブルは一方向なのか双方向なのか、同じです.理由は会員がFKでPKに署名できるからです.
チームはPKとFKにサインすればいいからだ.
関連関係の所有者とmappedBy
オブジェクトとテーブルの違い
オブジェクトの双方向関係
オブジェクトの双方向関係は実は双方向関係ではなく、2つの異なる一方向関係である.
表の双方向関連付け
SELECT *
FROM MEMBER M
JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID
SELECT *
FROM TEAM T
JOIN MEMBER M ON T.TEAM_ID = M.TEAM_ID
2つのうちの1つは外部キーを管理します。
関連関係の所有者
誰を主人にする。
性能上の話題を混同し始めた
双方向マッピングの最大エラー
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setName("member1");
//역방향(주인이 아닌 방향)만 연관관계 설정
team.getMembers().add(member);
em.persist(member);
IDUSERNAMETEAM_ID1member1nullTeam team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setName("member1");
team.getMembers().add(member); //연관관계의 주인에 값 설정
member.setTeam(team); //**
em.persist(member);
IDUSERNAMETEAM_ID1member12双方向関連関係主義
JSON作成ライブラリはControllerによって作成されますが、戻り値をエンティティとしないでDTO
理由は、1つ目はStackOverflow、2つ目はエンティティが完全に変更可能であるためです.エンティティに戻った後、api spec
変更.
整理する
コツは、初めて設計したときにすべて一方向マッピングで終わること!そしてアプリケーション開発時に、必要なら追加しましょう!
Reference
この問題について(双方向関連および関連関係の所有者), 我々は、より多くの情報をここで見つけました https://velog.io/@roberts/양방향-연관관계와-연관관계의-주인テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol