본문 바로가기
JPA

[JPA] 고아객체

by byeongoo 2020. 4. 22.

1. 고아객체

  • 고아 객체 제거: 부모 엔티티와 연관관계가 끊어진 자식 엔티티 를 자동으로 삭제
  • orphanRemoval = true
  • Parent parent1 = em.find(Parent.class,id);
    • parent1.getChildren().remove(0);

    • //자식 엔티티를 컬렉션에서 제거
  • DELETE FROM CHILD WHERE ID=?

고아가 되면 자동으로 삭제됩니다. 즉, 연관관계가 끊어지면 delete 쿼리가 나갑니다.

parent에서 child를 관리할 때

remove후 flush가 될때 delete 쿼리가 나갑니다.

 

이처럼 잘못사용하면 위험합니다. 특정 엔티티가 개인 소유할 때 사용합니다. 또한 아래코드에서 parent를 지우면 자식들이 모두 delete 됩니다.

CascadeType.REMOVE (ALL)을 해두면, em.remove 지우면 child,parent 다 지웁니다.(전파) 라이프사이클을 영속성 컨텍스트로합니다. 2개다 활성화하면 부모를 통해 자식의 생명주기를 관리가능합니다. 중요한건 parent는 영속성 컨텍스트로 생명주기를 관리하는데, child는 생명주기를 parent로 관리합니다. 이게 도메인주도설계(DDD)의 Aggregate Root 개념을 구현할 때 유용합니다.

REFERENCE

https://www.inflearn.com/course/ORM-JPA-Basic

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다. 초급 웹 개발 서버 데이터베이스 프레임워크 및 라이브러리 프로그래밍 언어 서비스 개발 Java JPA Spring Data JPA 온라인 강의 ORM, JPA, 자바, java, 우아한형제들

www.inflearn.com

 

'JPA' 카테고리의 다른 글

[JPA] 값타입과 불변 객체  (0) 2020.04.26
[JPA] 임베디드 타입(복합 값 타입)  (0) 2020.04.26
[JPA] 영속성전이(CASCADE)와 고아 객체  (0) 2020.04.22
[JPA] 즉시로딩과 지연로딩  (0) 2020.04.22
[JPA] 프록시  (0) 2020.04.22