흰 스타렉스에서 내가 내리지

고아 객체 본문

JPA

고아 객체

주씨. 2024. 4. 10. 23:04
728x90

# 고아 객체

  • JPA 는 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능을 제공하는데, 이것을 고아 객체 제거라 한다.
@OneToMany(mappedBy = "parent", orphanRemoval = true)
private List<Child> children = new ArrayList<Child>();
  • 이제 컬렉션에서 제거한 엔티티는 자동으로 삭제된다. 
parent.getChildren().remove(0);	// 자식 엔티티를 컬렉션에서 제거

DELETE FROM CHILD WHERE ID = ?
  • orphanRemoval = true 옵션으로 인해 컬렉션에서 엔티티를 제거하면 데이터베이스의 데이터도 삭제된다. 

 

* 정리

  • 고아 객체 제거는 참조가 제거된 엔티티는 다른 곳에서 참조하지 않는 고아 객체로 보고 삭제하는 기능이다. 
  • 따라서 이 기능은 참조하는  곳이 하나일 때만 사용해야 한다. 
  • 즉, orphanRemoval 은 @OneToOne, @OneToMany 에만 사용할 수 있다. 

 

  • 부모를 제거하면 자식은 고아가 된다. 
    • 따라서 부모를 제거하면 자식도 같이 제거된다. 

 

 

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

  • CascadeType.ALL + orphanRemoval = true 를 동시에 사용하면?
    • 두 옵션을 모두 활성화하면 부모 엔티티를 통해서 자식의 생명주기를 관리할 수 있다. 
@OneToMany(mappedBy = "parent", CascadeType = ALL, orphanRemoval = true)

'JPA' 카테고리의 다른 글

JPQL 파라미터 바인딩  (0) 2024.04.13
TypeQuery 와 Query  (0) 2024.04.13
프록시와 즉시로딩/지연로딩  (0) 2024.04.08
일대일 식별 관계  (0) 2024.04.04
복합 키 : 비식별 관계 매핑  (1) 2024.04.04