-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Labels
Description
무엇을 알게 되었나요?
양방향 매핑
- 양방향 매핑은 두 객체가 서로 참조해야 하는 상황에서 정의하는 연관관계 방식이다.
- 실제로는 각각의 단방향 매핑이 존재하는 것이며 이를 합쳐 양방향을 의미한다.
MappedBy 사용 이유
- 현재 Member와 Team은 N:1 관계이다.
- 여기서 양방향 매핑을 적용한다면, Member 객체뿐만 아니라 Team 객체도 members 필드를 통해 MEMBER 테이블에 접근이 가능해지기 때문에 혼란이 생길 수 있다.
- 그렇기 때문에 두 객체중 하나의 객체만 테이블을 관리할 수 있도록 정하는 것이 MappedBy 옵션이다. 그렇다면 어느 곳에 해당 옵션을 사용하는 게 좋을까?
MappedBy 위치
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
private int age;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
… Getter, Setter 생략
}@Entity
public class Team {
@Id @GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "team")
List<Member> members = new ArrayList<Member>();
… Getter, Setter 생략
}- 주인이 아닌 객체에 MappedBy를 적용해야 한다.
- 예제에서는 Team 객체에 MappedBy가 적용되어 있는 것을 볼 수 있는데 이 경우에는 Team 객체는 MEMBER 테이블을 관리할 수 없고 Member 객체만이 권한을 받고 주인이 아닌 쪽은 읽기(조회)만 가능해진다. 즉, MappedBy가 정의되지 않은 객체가 주인(Owner)가 되는 것이다.
- 일반적으로 외래키를 가진 객체를 주인으로 정의하는 것이 좋다.(외래키를 가진 Member 객체가 주인)
어려운 내용이 있었다면 이를 어떻게 해결하였나요?
x
어떤 자료를 참고하였나요?
JungYoonShin