@ManyToOne
@OneToMany
@OneToOne
@ManyToMany
테이블
객체
@JoinColumn
을 꼭 사용해야 함! 그렇지 않으면 조인 테이블 방식을 사용함(중간에 테이블을 하나 추가함)📌 일대다 단방향 매핑의 단점
- 엔티티가 관리하는 외래 키가 다른 테이블에 있음
- 연관관계 관리를 위해 추가로 UPDATE SQL 실행
➡️ 일대다 단방향 매핑보다는 다대일 양방향 매핑을 사용하자!
@JoinColumn(insertable=false, updatable=false)
@ManyToOne
) 단방향 매핑과 유사mappedBy
적용@OneToOne
)@ManyToMany
)Delivery
클래스 추가package jpabook.jpashop.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Delivery {
@Id @GeneratedValue
private Long id;
private String city;
private String street;
private String zipcode;
private DeliveryStatus status;
@OneToOne(mappedBy = "delivery")
private Order order;
}
Category
클래스 추가package jpabook.jpashop.domain;
import javax.persistence.*;
import java.sql.Array;
import java.util.ArrayList;
import java.util.List;
@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<>();
@ManyToMany
@JoinTable(name = "CATEGORY_ITEM",
joinColumns = @JoinColumn(name = "CATEGORY_ID"),
inverseJoinColumns = @JoinColumn(name = "ITEM_ID")
)
private List<Item> items = new ArrayList<>();
}
Order
클래스 수정@OneToOne
@JoinColumn(name = "DELIVERY_ID")
private Delivery delivery;
Item
클래스 수정@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();
실행시켜보면, 위와 같이 테이블에 반영이 잘 된 것을 확인할 수 있다 🤗
암요,, 이해했고 말고요,,