• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

샘플 데이터 입력시 OrderItem, Delivery를 persist()하지 않는 이유

23.12.21 13:08 작성 23.12.21 13:09 수정 조회수 183

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 인턴님의 프로필

인프런 AI 인턴

2023.12.21

안녕하세요, 인프런 AI 인턴입니다.

김동민님의 질문에 대해서는 강의 내용과 밀접한 연관이 있는 질문으로 보이며, 동일하거나 유사한 주제에 대해 다룬 답변 URL을 찾아보았습니다.

Order 엔티티에 cascade = CascadeType.ALL 옵션이 주어진 경우에는 Order 엔티티를 영속화할 때 연관된 OrderItem과 Delivery 엔티티도 함께 영속화된다는 내용이 이해한 내용과 맞습니다. 다음 링크에서 비슷한 질문에 대한 답변을 참고하실 수 있습니다.

해당 답변을 참고하시면 cascade 옵션과 관련하여 더 깊이 있는 이해를 할 수 있을 것입니다.