Backend/SpringBoot
양방향맵핑과 'mappedBy'
Mo'Greene
2022. 12. 30. 22:56
두 엔티티가 있다.
@Entity
class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long memberId;
@ManyToOne
private Team team;
}
@Entity
class Team {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long teamId;
@OneToMany
private Set<Member> members = new HashSet<>();
}
과연 두 엔티티는 '양방향 맵핑' 되었다고 말할 수 있을까?
db를 살펴보자
Member와 Team은 각 이름의 테이블로 서로가 양방향맵핑이 되었다고 생각되는데 뜬금없는 TEAM_MEMBERS가 생겨있다.
TEAM_MEMBERS는 Team엔티티에서 @OneToMany 를 통해 생긴 테이블이라는걸 알 수 있고
erd로 보자면 이렇게 얌전히 서로가 얽혀있는 관계가 아닌
Member -> Team
Team -> Team_Member 라는 2개의 '단방향 맵핑'이 생겨버린 상황이다.
위와같은 상황을 해결코자 사용하는 것이 mappedBy 다.
mappedBy는 '연관관계의 주인'이 누구냐고 해석하는 것이다.
@Entity
class Team {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long teamId;
@OneToMany(mappedBy = "team")
private Set<Member> members = new HashSet<>();
}
위와 같이 mappedBy 설정을 통해 Member의 엔티티에 Team의 값을 넣어주게 되었다.
각 엔티티의 양방향 맵핑을 설정해주게 되었다.