-
[Spring] 고아 객체Spring 2025. 4. 17. 10:55
Spring
🔥 고아 객체
JPA 에서 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 말한다.※ 계시글에서 댓글 하나를 삭제를 했는데 DB에서 연전히 댓글이 남아있다면....고아 객체(외톨이) 발생!!!
📌 고아 객체의 인생 요약 (비극 버전)
태어날 땐 Parent 덕분에 존재감 있었음
하지만 관계가 끊기자…
누구도 참조하지 않음
영속성 컨텍스트에서도 잊혀지고
결국 DB에서도 삭제됨
💀 “그 누구도 관심을 주지 않았다… 그래서 사라졌다.”
@Entity public class Parent { @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true) private List<Child> children = new ArrayList<>(); }
parent.getChildren().remove(child);
- child 는 parent와의 관계가 끊어짐
- orphanRemoval = true가 설정되어 있다. (기본값 false)
CascadeType.ALL과 orphanRemoval = true를 함께 사용하는 경우 부모 Entity를 통해서 자식 Entity의 생명주기를 관리 할수 있다.
도메인(Domain Driven Design)에 주로 사용한다.(자식 Entity는 별도의 Repository Layer가 없어도 된다.) - DB에서도 해당 child 레코드가 삭제된다.
⚠️ 주의점
- 참조하는 곳이 하나인 경우에만 사용한다.
● 단일 Entity에 완전히 종속적인 경우 생명주기가 같다면 사용한다. - @OneToOne, @OneToMany만 사용이 가능하다.
● 부모 Entity를 제거하면 자식 Entity는 고아 객체가 된다.
● CascadeType.REMOVE와 비슷하게 동작한다.
'Spring' 카테고리의 다른 글
[Spring] HttpMessageConverter (0) 2025.04.17 [Spring] 트랜잭션 (0) 2025.04.17 [Spring] 영속성 전이 (Cascade) (0) 2025.04.17 [Spring] 지연로딩, 즉시 로딩 (0) 2025.04.16 [Spring] Proxy (0) 2025.04.16