🅙🅟🅐 04.
📍 関連関係マッピング
オブジェクトとテーブルの関連付けの違い
🔻 表をモデリングするオブジェクト
理由
方向に関連する関係のタイプ
1.一方向関連
コードの例
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USER_NAME")
private String name;
private int age;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
...
}
@Entity
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
...
}
オブジェクトは、2つのオブジェクトの1つで外部キーを管理する必要があります(関連関係の所有者を決定します).
理由
双方向マッピング規則
1.関連カニの所有者としてオブジェクトの2つの関係の1つを指定
2.外部キーを管理するのは、関連関係の所有者のみです
3.非マスターは読み取り専用(mappedByプロパティを使用)
4.外来キーのある場所をご主人様に指定!
コードの例
```java
@Entity
public class Member {
@Id @GeneratedValu
private Long id;
@Column(name = "USER_NAME")
private String name;
private int age;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
...
}
@Entity
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "TEAM")
List<Member> members = new ArrayList<Member>();
...
}
```
双方向関連の注意事項
作成方法
双方向マッピングの一般的なエラー
逆方向(主方向以外)のみ関連付けを設定
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setName("member1");
//역방향(주인이 아닌 방향)만 연관관계 설정
team.getMembers().add(member);
em.persist(member);
純粋なオブジェクト関係を考慮して、常に2つの多値を入力する必要があります.
Team 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);
「関連関係」を使用すると便利な方法で、所有者の値しか入力できません.
// Team Class 에서
// 연관관계 편의 메소드
public void setTeam(Member member) {
this.member = member;
member.getOrders().add(this);
}
// ✔ changeTeam() 이런 식으로 이름 바꾸면 더 좋음
Reference
この問題について(🅙🅟🅐 04.), 我々は、より多くの情報をここで見つけました https://velog.io/@uuuouuo/jpa-4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol