Spring
[Spring] 고아 객체
Paragon53
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와 비슷하게 동작한다.