실전예제3 - 다양한 연관관계 매핑
주문과 배송이 일대일, 상품과 카테고리가 다대다인 관계를 전에 배운것으로 풀어보자.
아무튼 실습해보자. 먼저 카테고리 클래스와 딜리버리 클래스를 만든다.
package hellojpa;
import jakarta.persistence.*;
@Entity
public class Category {
@Id @GeneratedValue
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "PARENT_ID")
private Category parent;
@OneToMany(mappedBy = "parent")
private List<Category> child = new ArrayList<>();
}
package hellojpa;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
@Entity
public class Delivery {
@Id @GeneratedValue
private Long id;
private String city;
private String street;
private String zipcode;
private DeliveryStatus status;
}
💡 핵심적인건 아니지만, 재미있는 기술이 하나 나온다. Category클래스를 보면 스스로와 매핑되어있는 걸 볼 수 있다.
@ManyToOne @JoinColumn(name = "PARENT_ID") private Category parent; @OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>();
이건… 잘 이해는 안되는데, 왜냐면 DB에 PARENT_ID가 어느 테이블에 있는지..?
객체
DB
보면… CATEGORY테이블에 PARENT_ID가 있다. 근데 FK이다. DB ERD어디를 봐도 PARENT_ID를 PK로 가진 테이블이 없다. 그니까 이건 그냥 스스로 PK이자 FK로 가지고 있는건가…? 카테고리 테이블엔 말 그대로 종류가 종류별로 있을 것임. 동일 테이블의 다른 레코드의 CATEGORY_ID를 가져와 본인이 FK로 쓰는 듯 하다…!!!