Optional<P> optP = pr.findById("C1")
- managed상태에서 생성된 P객체
- em.clear() 은 자동 호출된다.
- 작업이 끝나면 P객체는 detached상태가 된다.
PD pd = new PD();
- new 상태 (PC 외부)에서 PD생체를 생성한다.
pd.setP(p);
p.setPD(pd);
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를 설정하는 것이 좋다.