
제가 table 설계할때 헷갈려서 써봅니다.
'다대일' 관계에서 Member 테이블이 '다' 이고 Team 테이블이 '일' 이 됩니다.
Team 안에는 여러 members가 들어갈 수 있기 때문입니다.
그래서 TEAM_ID가 FK가 되어야 하지 않을까 생각했습니다.
Team 클래스가 OneToMany 중 One이니까 매핑하지 편하지 않을까 하는 생각에서 입니다.
하지만 다시 생각해보면
Member의 team 값을 업데이트 vs Team의 members를 업데이트
그러면 Member의 team값 을 업뎃하는게 DB입장에서는 훨씬 덜 번거롭지 않을까요?
Member에 있는 TEAM_ID와 Team의 TEAM_ID(PK)와 조인하면 이 Member가 어느 Team 소속인지 알 수 있게 하는게 맞는 로직입니다. Team 입장에서도 조인되어 있으니까 지금 team안에 어떤 member들이 있는지 알 수 있겠죠.
따라서 Member.team이 연관관계의 조인이 됩니다.
mappedBy는 주인이 아닌쪽에 써주는데 by자체가 ~에 의해 매핑되었다 라는 뜻을 가지고 있기 때문입니다.
따라서 보통 @ManyToOne 클래스가 연관관계의 주인이 되고 @OneToMany 클래스 쪽이 mappedBy로 mapped되어집니다.
@OneToMany(mappedBy = "team") //member에 있는 team으로 매핑이 되어있는 애다
Team class의 @OneToMany(mappedBy = "team")에서 team 값은
@ManyToOne
@Column(name = "TEAM_ID",insertable = false, updatable = false)
private Team team;
이렇게 Member class의 team으로 매핑되어 있는 "team"을 가르킵니다.
[참고] : 갓영한님 인프런 강좌 <자바 ORM 표준 JPA 프로그래밍 - 기본편>
'spring' 카테고리의 다른 글
| @FunctionalInterface 사용기 (0) | 2024.08.18 |
|---|