인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

relate16님의 프로필 이미지
relate16

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

@JoinColumn 질문 :]

해결된 질문

작성

·

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

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

김영한님의 프로필 이미지
김영한
지식공유자

세준님 감사합니다^^

relate16님의 프로필 이미지
relate16
질문자

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

@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
질문자

감사합니다 ! :) 

relate16님의 프로필 이미지
relate16

작성한 질문수

질문하기