JPA/JPA 기본

30. 실전 연관관계 관리

sdafdq 2023. 10. 29. 14:22

뭐 일단 기본은,

ManyToOne 쪽이 주인이라는 것과, 

일단 그렇게 단방향으로 다 설계하고, 필요에 따라서 양방향,

 

그리고, 또 중요한 것이 모두 지연로딩으로.

 

@xToOne은 기본이 즉시로딩이므로,

fetch=FetchType.LAZY

해서 모두 지연로딩으로 바꿔줘야 한다.

뭐 그냥 다 지연로딩으로 하면 된다.

 

이번같은 경우

주문이랑 배송이랑은 거의 짝꿍이고, 생명주기도 같아보이므로,

영속성 전파를 사용할 것이다.

 

주문과 주문상품도, 주문에 완전히 종속적이기에, 고아객체와 영속성 전파를 모두 사용하는 것도 괜찮아 보인다.

 

@Entity
@Table(name="ORDERS")
public class Order extends BaseEntity{
    @Id
    @GeneratedValue
    @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;

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

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

이런 식으로.

 

어 근데 강의에서는 따로 고아객체(orphanRemoval) 설정은 주지 않았다.

https://www.inflearn.com/questions/1060404

그래서 뭐 생각도 해보고 질문도 해봤다.

'JPA > JPA 기본' 카테고리의 다른 글

32. 임베디드 타입  (0) 2023.10.29
31. 기본값 타입  (0) 2023.10.29
29. 영속성 전이와 고아 객체  (0) 2023.10.28
28. 즉시로딩, 지연로딩  (0) 2023.10.28
27. 프록시  (0) 2023.10.27