ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 고아 객체
    Spring 2025. 4. 17. 10:55

     

    minecraft-font

    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 레코드가 삭제된다.

     

    ⚠️ 주의점

    1. 참조하는 곳이 하나인 경우에만 사용한다.
      ● 단일 Entity에 완전히 종속적인 경우 생명주기가 같다면 사용한다.
    2. @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
Designed by Tistory.