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

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

with_all님의 프로필 이미지
with_all

작성한 질문수

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

<실전 예제 3 - 다양한 연관관계 매핑> 관련 질문 2개

작성

·

234

0

안녕하세요. <실전 예제 3 - 다양한 연관관계 매핑>에서 질문이 있습니다.

 

1) Delivery 클래스에는 다음과 같이 기술되어 있는데요.

 

    @Id

    @GeneratedValue

    private Long id;

 

Order 클래스에서는 다음과 같이 기술되어 있습니다.

 

    @OneToOne

    @JoinColumn(name = "DELIVERY_ID")

    private Delivery delivery;

 

DELIVERY_ID라고 이름 지어진 변수가 없는데( @Column(name = "DELIVERY_ID")가 기술되어 있지 않습니다 ), 어떻게 @JoinColumn(name = "DELIVERY_ID") 이 가능한 것인가요?

 

2) Category 클래스에서 id에는 다음처럼만 기술되어 있습니다.

 

    @Id

    @GeneratedValue

    private Long id;

 

즉 @Column(name = "PATENT_ID")가 없지요.

 

그런데 어떻게 

 

    @ManyToOne

    @JoinColumn(name = "PARENT_ID")

    private Category parent;

 

에서 @JoinColumn(name = "PARENT_ID")이 가능할 수 있는 것인가요?

 

기존에 올라와 있는 질문을 검색해서 https://www.inflearn.com/questions/113969 을 읽어보았습니다.

 

@JoinColumn의 name은 FK 이름이라고 하셨는데요. 

 

하지만 @Column(name = "PATENT_ID")가 없으니 PATENT_ID라는 FK가 생성 자체가 안 되는 것 아닌가요?

 

읽어주셔서 감사합니다.

 

답변 1

1

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

.
1. JPA에서 칼럼명을 생성하는 관례가 있습니다. Delivery클래스에 id라는 이름을 가지는 멤버변수가 있다면 DELIVERY_ID로 칼럼명을 생성합니다.

2. 이것 또한 관례로 생성되는 것과 동일합니다. parent의 타입이 Category입니다. Category 테이블을 생성할 때 (FK로 쓰여질) parent에 대한 칼럼을 생성하게 됩니다. 해당 칼럼명은 다음과 같이 만들어집니다. 변수명(PARENT)+PK의 변수명(ID) => PARENT_ID


.
감사합니다.

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

답변 감사드립니다.

with_all님의 프로필 이미지
with_all

작성한 질문수

질문하기