본문으로 바로가기

실습 5 - 연관관계 관리

category Spring/Spring JPA 2024. 3. 20. 23:49

글로벌 패치 전략 설정

  • 모든 연관관계를 지연 로딩으로
  • @ManyToOne, @OneToOne은 기본이 즉시 로딩이므로 지연 로딩으로 변경

 

 

예시

Category.java 

  • 지연로딩 추가
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PARENT_ID")
private Category parent;

 

Delivery.java

@OneToOne(mappedBy = "delivery", fetch = FetchType.LAZY)
private Order order;

 

Order.java

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "MEMBER_ID")
private Member member;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DELIVERY_ID")
private Delivery delivery;

 

OrderItem.java

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ORDER_ID")
private Order order;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="ITEM_ID")
private Item item;

 

영속성 전이 설정

  • Order -> Delivery 를 영속성 전이 ALL 설정
  • Order -> OrderItem을 영속성 전이 ALL 설정
  • 주문을 할떄 동시에 일어나는 것들 (lifecycle 이 동일한것들 !!)

예시

Order.java

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "DELIVERY_ID")
private Delivery delivery;

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems = new ArrayList<>();

 

  • 위와같이 설정해주면 persist 를 order 하나만 해도 위에 두 객체 모두 디비에 insert 됨

'Spring > Spring JPA' 카테고리의 다른 글

임베디드 타입  (0) 2024.03.22
값 타입  (0) 2024.03.22
영속성 전이 : CASCADE와 고아 객체  (0) 2024.03.20
즉시 로딩과 지연 로딩  (0) 2024.03.20
프록시  (0) 2024.03.20