본문 바로가기

JPA

8.6 영속성 전이 + 고아객체, 생명주기

CascadeType.ALL + orphanRemoval = true를 동시에 사용하면 어떻게 될까?

 

일반적으로 엔티티는 EntityManager.persist()를 통해 영속화되고 EntityManager.remove()를 통해 제거된다. 이것은 엔티티 스스로 생명주기를 관리한다는 뜻이다. 때문에 두 옵션을 모두 활성화 하면 자식의 생명 주기를 관리할 수 있다.

 

자식을 저장하려면 부모에 등록만 하면 된다.(CASCADE)

Parent parent = em.find(Parent.class, parentId);
parent.addChild(child1);

 

자식을 삭제하려면 부모에서 제거하면 된다. (orphanRemoval)

Parent parent = em.find(Parent.class, parentId);
parent.getChildren().remove(removeObject);

 

8.7 정리

 

- JPA 구현체들은 객체 그래프를 마음껏 탐색할 수 있도록 지원하는데 이때 프록시 기술을 사용한다.

- 객체를 조회할 때 연관된 객체를 즉시 로딩하는 방법을 즉시 로딩이라고 하고, 연관된 객체를 지연해서 로딩하는 방법을 지연 로딩이라 한다.

- 객체를 저장하거나 삭제할 때 연관된 객체도 함께 저장하거나 삭제할 수도 있는데 이것을 영속성 전이라고 한다.

- 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하려면 고아 객체 제거 기능을 사용하면 된다.

'JPA' 카테고리의 다른 글

7.2 @MappedSuperClass  (0) 2021.01.17
7.1 상속관계 매핑  (0) 2021.01.17
8.5 고아객체  (0) 2021.01.16
8.4 영속성 전이: CASCADE  (0) 2021.01.16
8.3.1 프록시와 컬렉션 래퍼  (0) 2021.01.16