오봉이와 함께하는 개발 블로그
JPA - 실전 예제 5 - 연관관계 관리 본문
728x90
이전 코드 참조
https://5bong2-develop.tistory.com/233
글로벌 페치 전략 설정
- 모든 연관관계를 지연 로딩으로
- @ManyToOne, @OneToOne은 기본이 즉시 로딩이므로 지연 로딩으로 변경
코드
@Entity
@Getter @Setter
public class Category extends BaseEntity{
@Id @GeneratedValue
@Column(name = "CATEGORY_ID")
private Long id;
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@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"), // Category가 Join하는 컬럼 명시
inverseJoinColumns = @JoinColumn(name = "ITEM_ID") // Item이 Join하는 컬럼 명시
)
private List<Item> items = new ArrayList<>();
}
@Entity
@Getter @Setter
public class Delivery extends BaseEntity{
@Id @GeneratedValue
@Column(name = "DELIVERY_ID")
private Long id;
private String city;
private String street;
private String zipcode;
private DeliveryStatus status;
@OneToOne(mappedBy = "delivery", fetch = FetchType.LAZY)
private Order order;
}
@Entity
@Table(name = "ORDERS")
@Getter @Setter
public class Order extends BaseEntity{
@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ORDER_ID")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "MEMBER_ID")
private Member member;
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DELIVERY_ID")
private Delivery delivery;
}
@Entity
public class OrderItem extends BaseEntity{
@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ORDER_ITEM_ID")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ORDER_ID")
private Order order;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ITEM_ID")
private Item item;
private int orderPrice;
private int count;
}
영속성 전이 설정
- Order -> Delivery를 영속성 전이 ALL 설정
- Order -> OrderItem을 영속성 전이 ALL 설정
코드
@Entity
@Table(name = "ORDERS")
@Getter @Setter
public class Order extends BaseEntity{
@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ORDER_ID")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "MEMBER_ID")
private Member member;
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems = new ArrayList<>();
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "DELIVERY_ID")
private Delivery delivery;
}
출처 : 인프런 김영한 지식공유자님의 스프링 부트와 JPA 실무 완전 정복 로드맵 강의
728x90
'BE > JPA' 카테고리의 다른 글
JPA - 임베디드 타입 (0) | 2022.06.29 |
---|---|
JPA - 기본값 타입 (0) | 2022.06.29 |
JPA - 영속성 전이(CASCADE)와 고아 객체 (0) | 2022.06.28 |
JPA - 즉시 로딩, 지연 로딩 (0) | 2022.06.28 |
JPA - 프록시 (0) | 2022.06.28 |
Comments