• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

일대다 연관관계 referenceColumnName 질문

23.03.03 19:42 작성 23.03.03 19:45 수정 조회수 262

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

안녕하세요. 다름이 아니라 @JoinColumn 에서는 name 속성으로 외래키 컬럼의 컬럼명을 지정하고, 생략된 referenceColumName 속성을 통해 해당 외래키가 대상 테이블의 어떤 컬럼과 연결되는지 정하는 것으로 알고 있습니다.

@OneToMany
@JoinColumn(name = "TEAM_ID")
private List<Member> members = new ArrayList<>();

그런데 일대다 연관관계에서 다음과 같이 일 쪽에서 joinColumn을 넣어줄 경우 referenceColumnName 속성은 디폴트 값으로 어떤 컬럼과 연결되는지 궁금합니다.

영한 선생님의 답변글에서는 디폴트 값으로 해당 필드의 타입을 확인하고 해당 타입의 pk컬럼과 연결시켜준다고 봤는데 위 경우는 List가 나와서 어떻게 되는지 궁금합니다.

답변 1

답변을 작성해보세요.

1

안녕하세요. hw h님

다음을 참고해주세요.

https://www.inflearn.com/questions/113969

referenceColumnName을 지정하지 않으면 대상 테이블의 PK가 사용됩니다.

이 경우 Member 테이블의 PK 값이 사용됩니다.

감사합니다.

hw h님의 프로필

hw h

질문자

2023.03.04

답변 감사합니다! 그런데 추가적으로 궁금한 점이 해당 예시에서는 List members 가 TEAM_ID와 매핑된다고 그림으로 나오는데 (영상 14:44초) 위와 같이 코드를 작성하면 MEMBER_ID 와 연관관계가 형성되게 되는 것이 아닌가요?

그리고 분명 '일' 쪽에 @JoinColumn 을 사용했는데 '다' 쪽 테이블에 해당 컬럼이 추가되는 원리가 궁금합니다. 이 부분은 Jpa가 OneToMany 어노테이션을 보고 어느쪽이 '다' 쪽인지 파악해서 알아서 '다' 쪽 테이블에 외래키를 추가해주는 구조인가요?

답변 해주시면 정말 감사하겠습니다!!

아~ 질문을 이해했습니다. :)

일대다 단방향의 경우에는 예외적으로 @JoinColumn이 자신이 아니라 대상 테이블에 있기 때문에 대상 테이블의 FK가 PK로 참조해야 하는 곳, 그러니까 결과적으로 자기 엔티티의 PK를 바라보게 됩니다.

여기서는 Team의 PK가 되겠지요^^

감사합니다.

hw h님의 프로필

hw h

질문자

2023.03.04

답변 감사합니다!