Spring/SpringBoot

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

SK_MOUSE 2022. 4. 3. 22:00
반응형

 

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

(안바꿀시, 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)만 해주면됨

 

반응형