해결된 질문
작성
·
277
·
수정됨
0
확인 차원에서 질문드립니다.
샘플 데이터를 넣는 코드에서 member, book, order은 em.persist()를 통해 영속성 컨텍스트에 등록합니다.
반면에 orderItem과 delivery는 따로 persist()를 하지 않습니다. 그 이유가 Order 엔티티 연관 관계에서 Cascasde 옵션을 했기 때문에, order 객체를 영속성 컨텍스트에 올려 놓는 순간, orderItem과 delivery 객체도 함께 등록되기 때문이라고 이해했습니다.
제가 잘 이해했는지 궁금합니다.
package jpabook.jpashop.domain;
@Entity
@Table(name = "orders")
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Order {
....
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems = new ArrayList<>();
@OneToOne(fetch = LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "delivery_id")
private Delivery delivery;
....
}
public void dbInit1() {
Member member = createMember("userA", "서울", "1", "1111");
em.persist(member);
Book book1 = createBook("JPA1 BOOK", 10000, 100);
em.persist(book1);
Book book2 = createBook("JPA2 BOOK", 20000, 100);
em.persist(book2);
OrderItem orderItem1 = OrderItem.createOrderItem(book1, 10000, 1);
OrderItem orderItem2 = OrderItem.createOrderItem(book2, 20000, 2);
Delivery delivery = createDelivery(member);
Order order = Order.createOrder(member, delivery, orderItem1, orderItem2);
em.persist(order);
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
김동민님의 질문에 대해서는 강의 내용과 밀접한 연관이 있는 질문으로 보이며, 동일하거나 유사한 주제에 대해 다룬 답변 URL을 찾아보았습니다.
Order 엔티티에 cascade = CascadeType.ALL
옵션이 주어진 경우에는 Order 엔티티를 영속화할 때 연관된 OrderItem과 Delivery 엔티티도 함께 영속화된다는 내용이 이해한 내용과 맞습니다. 다음 링크에서 비슷한 질문에 대한 답변을 참고하실 수 있습니다.
해당 답변을 참고하시면 cascade 옵션과 관련하여 더 깊이 있는 이해를 할 수 있을 것입니다.