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 |