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

윤가람님의 프로필 이미지

작성한 질문수

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

실전 예제 3 - 다양한 연관관계 매핑

@JoinColumn 관련해서 질문있습니다.

22.01.13 16:45 작성

·

272

2

1. 강의 5:54분 을 보면

Order라는 엔티티에서

@OneToOne

@JoinColumn(name="DELIVERY_ID")

private Delivery deliver;

 

이 부분과 Delivery 엔티티에서의 

@Id @GeneratedValue

private Long id;

@Column(name="DELIVERY_ID")

이 부분이 없는데 서로 어떻게 Join 되는건지 궁금합니다.

 

2. 그리고 추가로 강의 8:00 에 보시면

셀프조인 하는 부분이 나오는거 같은데

@ManyToOne

@JoinColumn(name="PARENT_ID")

private Category parent;

이것의 의미는 parent 는 Category 엔티티의 PARENT_ID와 조인한다? 라는 의미가 맞나요?

근데 정작 Category 엔티티에서는 PARENT_ID라는 필드가 없는데 어떻게 조인되는건지 궁금합니다.

 

 

 

답변 2

7

David님의 프로필 이미지

2022. 01. 14. 10:31

안녕하세요. 윤가람님, 공식 서포터즈 David입니다.

.

1. 강의 5:54분 을 보면 Order라는 엔티티에서

@OneToOne

@JoinColumn(name="DELIVERY_ID")

private Delivery deliver;

이 부분과 Delivery 엔티티에서의 

@Id @GeneratedValue

private Long id;

@Column(name="DELIVERY_ID")

이 부분이 없는데 서로 어떻게 Join 되는건지 궁금합니다.

=>

@JoinColumn(name = "Delivery_Id")를 설정하면

먼저, Order 테이블에 Delivery_Id라는 외래키 컬럼이 생성됩니다.

Order의 Delivery delivery 변수에 delivery 엔티티가 할당되면 Order를 저장할 때 delivery 엔티티의 PK를 외래키 컬럼인 Delivery_Id에 저장하게 됩니다.

따라서 Delivery 엔티티의 Delivery_Id 칼럼의 존재유무와 무관합니다.

 

2. 그리고 추가로 강의 8:00 에 보시면 셀프조인 하는 부분이 나오는거 같은데

@ManyToOne

@JoinColumn(name="PARENT_ID")

private Category parent;

이것의 의미는 parent 는 Category 엔티티의 PARENT_ID와 조인한다? 라는 의미가 맞나요?

근데 정작 Category 엔티티에서는 PARENT_ID라는 필드가 없는데 어떻게 조인되는건지 궁금합니다.

=>

위에서 설명드린 것과 마찬가지입니다.

@JoinColumn(name = "PARENT_ID")를 설정하면

먼저, Category테이블에 PARENT_ID라는 외래키 컬럼이 생성됩니다.

Category의 Category parent변수에 Category 엔티티가 할당되면 Category를 저장할 때 Category parent엔티티의 PK를 외래키 컬럼인 PARENT_ID에 저장하게 됩니다.

.
감사합니다.

0

David님의 프로필 이미지

2022. 01. 13. 18:01

삭제된 글입니다

David님의 프로필 이미지

2022. 01. 14. 10:30

답변을 수정하였습니다. 다시 확인 부탁드립니다:)