해결된 질문
작성
·
352
0
아래처럼 연관관계 주인이 '다'(멤버 클래스)일 때를 보고
public class Member{
-생략-
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
-생략-
}
@JoinColumn이 처음엔 @JoinColumn이 적힌 곳의 클래스(테이블)의 Join할 컬럼을 지정하는구나 했는데,
연관관계 주인이 '일'(팀 클래스)일 때의 수업을 들으니까
public class Team {
@OneToMany
@JoinColumn(name = "TEAM_ID")
private List<Member> members = new ArrayList<>();
}
Team에서 JoinColumn을 했는데도
@JoinColumn이 적힌 곳의 클래스가 아닌,
MEMBER 테이블에서 TEAM_ID가 Join되는 걸 보니
그게 아닌 것 같더라구요.
어떻게 받아들이면 좋을까요?
답변 1
1
앗 제가 질문을 좀 더 구체적으로 했어야 했는데,
@JoinColumn의 name속성에 대한 질문은 아니었고
Team class{
-생략-
@OneToMany
@JoinColumn (name = "TEAM_ID")
private List<Member> member= new ArrayList<>();
-생략-
}
에서@JoinColumn (name = "TEAM_ID")과
private List<Member> member= new ArrayList<>(); 와의 관계의 질문이었어요 ㅠㅠ
Member class{
-생략-
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
-생략-
}
이라면
답변주신 것처럼
"MEMBER 테이블의 외래키 TEAM_ID 컬럼을 선택하는거예요."
라고 이해할 때, 이땐 밑에 private Team team;이 있으니까
MEMBER테이블의 외래키로 조인하는 게 아닌,
TEAM 테이블의 외래키로 TEAM_ID컬럼을 조인해야 되는 거 아닌가 해서ㅠㅠ (물론 이것도 말이 안되네요 TEAM테이블에서 TEAM_ID는 PK이니까요 )
돌아와서 말하자면,
public class Team {
-생략-
@OneToMany
@JoinColumn(name = "TEAM_ID")
private List<Member> members = new ArrayList<>();
-생략-
}
과 같이 MEMBER에는 외래키를 지정해주지 않은 상태에서 팀클래스에서 JoinColumn을 했는데
어떻게 DB의 MEMBER에 Team_ID가 join이 됐지 하는 생각이 들더라구요 .
천천히 머리 굴려봤는데
@OneToMany 때문에 가능한 것으로 이해했습니다.
어차피 외래키는 DB상 Many쪽에 있으니까
Many의 입장인 MEMBER가 외래키가 있는 걸로 인식해서 MEMBER에 Join을 해주는 설계가 있겠구나 하면서..
맞게 이해한 거겠죠 ..? 답변감사합니다 !
세준님 감사합니다^^