public class MemberMapping {
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String username;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private TeamMapping team;
//...getter, setter
}
public class TeamMapping {
@Id
@GeneratedValue
@Column(name = "TEAM_ID")
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<MemberMapping> members = new ArrayList<>();
//...getter, setter
}
//조회
MemberMapping findMember = em.find(MemberMapping.class, member.getId());
List<MemberMapping> members = findMember.getTeam().getMembers(); //객체 그래프 탐색: 팀 -> 멤버
1) 개념
그렇다면, 객체의 참조는 2개인데 외래키는 둘 중 무엇으로 관리해야할까?
📌 두 객체 연관관계 중 하나를 정해서 테이블의 외래키를 관리하기 위해 필요한 것이 "연관관계의 주인"
📌연관관계의 주인을 정한다 = 외래키 관리자를 선택한다
2) 매핑 규칙
- 연관관계의 주인(owner)만 데이터베이스의 연관관계와 맵핑 & 외래키 관리(등록, 수정, 삭제)
- 주인이 아닌 반대편(inverse)은 읽기만 가능, mappedBy 속성으로 연관관계의 주인값을 지정
//팀 저장
TeamMapping team = new TeamMapping();
team.setName("teamA");
em.persist(team);
//멤버1 저장
MemberMapping member1 = new MemberMapping();
member1.setUsername("member1");
member1.setTeam(team); //연관관계 설정: member1 -> team
em.persist(member1);
//멤버2 저장
MemberMapping member2 = new MemberMapping();
member2.setUsername("member2");
member2.setTeam(team); //연관관계 설정: member2 -> team
em.persist(member2);