Spring/SpringBoot

#4 Spring JPA 지연로딩 + 주의사항

SK_MOUSE 2022. 4. 3. 22:00
모든 연관관계는 지연로딩으로 설정!
fetch = FetchType.EGER
LAZY
엔티티에는 가급적 Setter를 사용하지 말자
컬렉션은 필드에서 초기화 하자.
cascade 옵션

 

모든 연관관계는 지연로딩으로 설정!

(안바꿀시, 1+N문제 발생)

Many to X(Many to One, Many to Many)는

디폴트값이 fetch = FetchType.EGER 이므로 모두 LAZY로 바꿔야함

 

다른 One to X(One to Many, One to One)는

디폴트값이 fetch = FetchType.LAZY 이므로 굳이 안바꿔줘도 된다.

 

예시)

​​​​@ManyToOne(fetch = FetchType.LAZY) ​​​​@JoinColumn(name = "item_id") ​​​​private Item item; ​​​​@ManyToOne(fetch = FetchType.LAZY) ​​​​@JoinColumn(name = "order_id")//양방향일때 해줘야됨 ​​​​private Order order;

엔티티에는 가급적 Setter를 사용하지 말자


Setter가 모두 열려있다. 변경 포인트가 너무 많아서, 유지보수가 어렵다. 나중에 리펙토링으로 Setter 제거

 

 


컬렉션은 필드에서 초기화 하자.

Member member = new Member(); System.out.println(member.getOrders().getClass()); em.persist(team); System.out.println(member.getOrders().getClass()); //출력 결과 /* class java.util.ArrayList class org.hibernate.collection.internal.PersistentBag */

cascade 옵션

 

예시)

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); /* 원래는 이렇게 다해줘야되는데 persist(orderItemA); persist(orderItemB); persist(orderItemC); */ ​persist(order)만 해주면됨

 

반응형