[SPRING] JPA 고아객체

2022. 6. 6. 16:42·SPRING
728x90

고아 객체

  • JPA에서 부모와 연관관계가 끊어진 자식엔티티를 고아 객체라 하며
  • JPA에서는 orphanRemoval 옵션을 통해서 고아객체를 자동으로 삭제하는 기능을 제공함

orphanRemoval 옵션

@Entity
@Getter
@Setter
public class Parent {

    @Id
    @GeneratedValue
    @Column(name = "parent_id")
    private Long id;

    @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST, orphanRemoval = true)
    private List<Child> childs = new ArrayList<>();

    public void addChild(Child child) {
        this.childs.add(child);
        child.setParent(this);
    }
}

@Entity
@Getter
@Setter
public class Child {

    @Id
    @GeneratedValue
    @Column(name = "child_id")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "parent_id")
    private Parent parent;

}
  • orphanRemoval 옵션이 true가 되면 부모엔티티에서 자식 엔티티를 제거할 경우 delete 쿼리가 발생 (바로 실행되지 않고 플러시할 때 적용할 경우 삭제쿼리가 실행)
  • 참조가 제거된 엔티티는 다른 곳에서 참조하지 않는 고아객체로 보고 삭제하게 됨, 참조하는 객체가 여러개라면 문제가 발생할 수 있기 때문에 일대일이나, 일대다 관계일 경우에 사용이 가능

Cascade Remove와 orphanRemoval 옵션

  • CascadeTypo.ALL (Remove 포함) + orphanRemoval=true
  • 두 옵션을 모두 활성화 할 경우 부모엔티티를 통해서 자식 엔티티의 생명주기를 관리할 수 있음
  • 도메인 주도 설계의 Aggregate Root 개념을 구현시 유용함

 

 

저작자표시

'SPRING' 카테고리의 다른 글

[SPRING] MOCKITO  (0) 2022.07.03
[SPRING] JPA 영속성 전이  (0) 2022.06.06
[SPRING] WEBFLUX 리액티브 오퍼레이션 정리  (0) 2022.05.08
[SPRING] JPA 쿼리메소드 요약  (0) 2022.04.19
[SPRING] Bean 생명주기 콜백 (PostConstruct / PreDestory)  (0) 2022.03.02
'SPRING' 카테고리의 다른 글
  • [SPRING] MOCKITO
  • [SPRING] JPA 영속성 전이
  • [SPRING] WEBFLUX 리액티브 오퍼레이션 정리
  • [SPRING] JPA 쿼리메소드 요약
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    프로그래머스
    ElasticSearch
    Elk
    cleancode
    splunk
    이펙티브코틀린
    docker
    클린코드
    엘라스틱서치
    AWS
    Spring
    Kafka
    SQL
    JPA
    코틀린
    자바
    java
    go
    이펙티브 코틀린
    IntelliJ
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[SPRING] JPA 고아객체
상단으로

티스토리툴바