샘플 데이터 입력시 OrderItem, Delivery를 persist()하지 않는 이유
확인 차원에서 질문드립니다.
샘플 데이터를 넣는 코드에서 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);
}
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
김동민님의 질문에 대해서는 강의 내용과 밀접한 연관이 있는 질문으로 보이며, 동일하거나 유사한 주제에 대해 다룬 답변 URL을 찾아보았습니다.
Order 엔티티에 cascade = CascadeType.ALL 옵션이 주어진 경우에는 Order 엔티티를 영속화할 때 연관된 OrderItem과 Delivery 엔티티도 함께 영속화된다는 내용이 이해한 내용과 맞습니다. 다음 링크에서 비슷한 질문에 대한 답변을 참고하실 수 있습니다.
- 질문 제목: OrderService의 order() 메서드 호출시 OrderItem Insert에 대해 궁금한 점이 있습니다.
- 링크: OrderService의 order() 메서드 호출시 OrderItem Insert에 대해 궁금한 점이 있습니다.
해당 답변을 참고하시면 cascade 옵션과 관련하여 더 깊이 있는 이해를 할 수 있을 것입니다.
SpringBoot4 버전 Hibernate5JakartaModule 라이브러리 오류
0
42
1
@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.
0
67
3
강의 관련 외 질문입니다.
0
105
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
2
128
1
BeanCreationException
0
110
3
Update 후 UpdateMemberResponse 매핑할 때
0
71
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
127
2
페이징 + 검색조건 관련해서 질문드립니다.
0
89
1
Query Dsl Q파일 질문입니다.
0
104
1
루트 쿼리라는것은
0
77
1
메서드를 분리하는 기준
0
91
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
141
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
117
2
fetch join과 영속화와 OSIV의 관계
0
121
2
Distinct 사용 전 결과에 대한 의문
0
139
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
75
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
96
2
dto 필드 속 엔티티 여부
0
82
1
뷰템플릿 사용 시
0
95
2
Result 클래스 관련 질문
0
71
1
@PostConstruct 프록시 관련 질문드립니다
0
104
1
DTO 대신 Form 사용은 안되나요?
0
150
1
OSIV ON 상태일 때
1
109
1
fetch join VS fetch join 페이징 궁금증
0
210
2

