인프런 커뮤니티 질문&답변
고아 객체 생성 조건
작성
·
636
·
수정됨
4
안녕하세요 영한님!
질문드립니다.
고아 객체는 부모 엔티티와 연관관계가 끊어진 자식 엔티티 라고 이해했습니다.
고아 객체가 생성되는 조건은
부모 엔티티 삭제
부모 엔티티가 삭제 되면 자식 엔티티를 고아객체로 판단 합니다.e.g)
em.remove(parent);부모 엔티티에 있는 자식 엔티티 컬렉션 제거
연관관계가 끊어진 자식 객체를 고아객체로 판단 합니다.e.g)
parent.getChild().remove(0);
결과적으로 orphanRemoval = true를 설정하면
자식 엔티티(고아 객체)는 부모 엔티티와 함께 삭제 되거나
자식 엔티티(고아 객체)만 삭제 된다.
맞게 이해하고 있는 것 일까요?
감사합니다.^^
답변 1






답변 감사의 말씀 드립니다. 영한님^^!
제가 테스트 한 내용을 공유 드립니다.
테스트 결과 공유 드립니다.!
테스트 결과 고아객체 생성 조건은 다음과 같이 2가지 입니다.
부모 엔티티 삭제
부모 엔티티가 삭제 되면 자식 엔티티를 고아객체로 판단 합니다.
e.g)
em.remove(parent);부모 엔티티에 있는 자식 엔티티 컬렉션 제거
연관관계가 끊어진 자식 객체를 고아객체로 판단 합니다.
e.g)
parent.getChild().remove(0);제가 이해하고 있는 것이 맞았습니다!🤗
orphanRemoval = true를 설정 🙆♂️
File
Post
실험 <부모 엔티티 삭제(
em.remove(parent);)>결과
부모 엔티티를 삭제하면(
em.remove(findPost);) 자식 엔티티가 먼저 삭제되고, 부모 엔티티가 삭제되는 것을 확인할 수 있습니다.마치
CascadeType.REMOVE처럼 동작 합니다.!!!실험 <부모 엔티티에 있는 자식 엔티티 컬렉션 제거(
parent.getChild().remove(0);)>결과
부모 엔티티와 자식 엔티티의 연관관계가 끊어지니 자식 엔티티에 대한
delete SQL이 발생 했습니다.!!이때
orphanRemoval을 적용하기 위해서는CascadeType.PERSIST를 포함시켜야합니다.https://www.inflearn.com/questions/137740/orphanremoval%EA%B3%BC-cascade%EC%9D%98-%EA%B4%80%EA%B3%84
orphanRemoval = true를 설정 🙅♂️
File
Post
실험
결과
지연로딩으로 설정했기 때문에
findPost.getFiles().remove(0);시점에서select * from File ... SQL이 발생합니다.그리고
orphanRemoval를 따로 설정하지 않아서 부모 엔티티와 자식 엔티티의 연관관계가 끊어졌음에도delete SQL이 발생하지 않았습니다.!감사합니다.^^