작성
·
77
·
수정됨
0
연관관계 관련 강의를 봐도 이해가 잘 안되는 부분이 있어서 질문드립니다.
본 강의에서는
@OneToMany
@JoinColumn(name = "MEMBER_ID") private List<AddressEntity> addressHistory;
이렇게 되어있는데요. 여기서 연관관계의 JoinColumn에 의해 외래키 컬럼이 생성되는것으로 알고있는데, 일대다 단방향 연관관계와 다대일 단방향 연관관계에서 각각 어느 테이블에 외래키 컬럼이 생성되는것인가요?
일대다 연관관계에서는 어느테이블에 생성되고, 다대일 연관관계에서는 어느테이블에 생성되는지가 규칙이 있는것일까요?
위 해당 테이블에 외래키컬럼이 생긴다고 할때, 그럼 외래키 컬럼의 값은 어떤 방법으로 값이 할당되어 테이블에 저장되는것인가요?
그리고 왜 @Joincolumn에 name속성으로 MEMBER_ID로 지정해주어야하는것인가요?
답변 2
0
DB 특성상 일에있는 테이블의 기본키가 N쪽에있는 테이블의 외래키로 들어가느게 맞습니다.
외래키는 연관되어있는 기본키가 외래키가됩니다.
연괸되어있는 Member 엔티티의 pk가 MEMBER_ID기때문이죠
이 질문하신게 DB이해도가 부족한것같습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 오리쉐리님.
JPA의 연관관계 매핑에서 @JoinColumn
을 사용하여 외래키(FK)를 어디에 생성할 것인지 지정하는 것은 아주 중요한 요소입니다. 님의 질문에 대한 답변을 단계별로 말씀드리겠습니다.
일대다와 다대일 연관관계에서 외래키가 생성되는 위치:
일대다 단방향 연관관계: 일반적으로 @ManyToOne
이 있는 엔티티가 외래키를 소유하게 됩니다. 이 경우, 외래키는 다수의 값이 있는 엔티티에 존재하게 됩니다. 하지만, 일대다 단방향 관계에서 @JoinColumn
이 적힌 쪽(즉, 하나의 값을 가진 엔티티)에 외래키가 놓이기도 합니다. 이는 예외적인 경우로, 테이블 설계에 따라 달라질 수 있습니다.
다대일 단방향 연관관계: 보통 이 연관관계에서는 “다” 쪽이 하나의 엔티티를 참조하므로, 외래키는 “다” 쪽 테이블에 만들어집니다. 일반적으로 @ManyToOne
어노테이션이 붙은 엔티티에 외래키가 생성됩니다.
외래키 컬럼의 값은 JPA에서 엔티티를 저장할 때 자동으로 연결된 엔티티의 주 키(PK)를 기준으로 매핑하여 할당됩니다. 즉, 참조한 엔티티의 식별자 값이 외래키 컬럼의 값으로 저장됩니다. 이 과정은 JPA가 엔티티의 상태 변경을 탐지하며, 데이터베이스에 적절한 SQL 문을 생성하여 수행합니다.
name 속성은 외래키의 컬럼명을 지정합니다. 만약 지정하지 않으면, JPA 구현체에 따라 명명 규칙이 적용되어 이름이 자동으로 정해질 수 있습니다. MEMBER_ID처럼 명시적으로 지정해 주면, 의도한 대로 명확하게 데이터베이스 스키마를 이해하고 설계할 수 있습니다.
위 설명이 도움이 되길 바랍니다. 관련 질문에 대한 더 자세한 답변은 아래 링크에서 확인할 수 있습니다:
- 일대다 연관관계에 관해서
- @JoinColumn 어노테이션 관련 질문있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.