뭐 일단 기본은,
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 |