영속성 전이 과정

0

SpringBoot

목록 보기
10/12
post-thumbnail
  1. Optional<P> optP = pr.findById("C1")
  • managed상태에서 생성된 P객체
  • em.clear() 은 자동 호출된다.
  • 작업이 끝나면 P객체는 detached상태가 된다.
  1. PD pd = new PD();
  • new 상태 (PC 외부)에서 PD생체를 생성한다.
  1. pd.setP(p);
    p.setPD(pd);
  2. pdr.save(pd)
  • save()를 하면 내부에서 SELECT 본인만 가져오는게 아니라 연관관계 있는 애들도 SELECT해온다.
    • SELECT * FROM PD WHERE pd_no = 'C1' 행 검색결과 없음
    • SELECT * FROM P WHERE p_no = 'C1' 행 검색결과 있음

만약 영속성 전이를 하지 '않았으면 '

  • PD객체는 managed상태가 된다.
  • p객체는 detach상태이기 때문에 set해도 계속 null이 뜸
    detach -> managed상태로 끌어오기 위해서 자식인 PD에서 @OneToOne p 객체를 cascade.MERGE를 해줘야함

만약 영속성 전이를 했다면

  • PD객체는 managed상태가 된다.
  • P 객체도 detached상태에서 managed상태가 됨
    ➡︎➡︎💡 save()할때는 경우에 따라서 persist() / merge()가 호출되므로 둘중하나를 설정하는 것 보단 두 경우를 모두 cascade를 설정하는 것이 좋다.
profile
백엔드를 공부하고 있습니다.

0개의 댓글