• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

@JoinColumn 질문 :]

21.07.21 10:26 작성 조회수 264

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

임세준님의 프로필

임세준

2021.07.22

DB 테이블 기준으로 생각하시면 됩니다.
MEMBER 테이블의 외래키 TEAM_ID 컬럼을 선택하는거예요. 자바 클래스와는 무관합니다

세준님 감사합니다^^

relate16님의 프로필

relate16

질문자

2021.07.23

앗 제가 질문을 좀 더 구체적으로 했어야 했는데,

@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을 해주는 설계가 있겠구나 하면서..  

맞게 이해한 거겠죠 ..? 답변감사합니다 ! 

네 맞습니다^^

relate16님의 프로필

relate16

질문자

2021.07.24

감사합니다 ! :)