작성
·
792
답변 1
13
안녕하세요 bk님
명확하게 답변을 드리자면, 마지막에 말씀해주신 부분이 맞습니다.
cascade는 mappedBy, 양방향 등등과 전혀 관계가 없습니다.
복잡하게 다른 것과 엮어서 고민하지 않으셔도 됩니다^^
단순하게 A -> B 관계가 cascade로 되어 있으면 A엔티티를 PERSIST할 때 B 엔티티도 연쇄해서 함께 PERSIST 해버린다고 이해하시면 됩니다.
감사합니다.
안녕하세요. 원석나님
제가 답을 바로 드릴 수도 있지만, 그러면 많은 것을 얻어가실 수 없으니, 이 부분은 직접 한번 코드로 테스트해보시고 결과를 남겨주시면 더 많은 것을 얻어가실 수 있을거에요.
감사합니다.
안녕하세요. 최근 강의를 들으면서 궁금한 점이 생겼는데
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "delivery_id")
private Delivery delivery; //배송정보
ORDERS 와 DELIVERY 은 1대 1 관계이고 ORDERS가 주인이 되서 외래키(DELIVERY_ID) 를 가지고 있는데
만약 아래의 코드처럼 주문의 delivery 를 가져오고 setId를 할 경우 order 테이블 과 delivery 테이블의 delivery_id 컬럼이 두개 다 변경된다고 보면 될까요?
Order order = new Order();
order.getDelivery().setId();
자답입니다.
1) jpa는 pk를 수정하면 안된다.
2) cascade는
Order order = ~~~
Delivery delivery = ~~~
order.setDelivery(delivery);
em.persist(order);
--> cascade 가 처리되어 있으면 order 생성 및 delivery 를 생성한다.
--> cascade 가 처리되어 있지 않으면 에러 발생 --> 이런 경우 아래 처럼 delivery 도 영속성에 넣어야 함
Order order = ~~~
Delivery delivery = ~~~
em.persist(delivery);
order.setDelivery(delivery);
em.persist(order);
A 가 Child B가 Parent 엔티티 라고 할때
Child -> Parent 형태에서 cascade로 되어있으면 Parent 엔티티를 PERSIST 할때 Child 엔티티도 PERSIST 한다 로 이해하는게 맞을까요 ??
Child - ManyToOne
Parent - OneToMany