[SPRING] JPA 영속성 전이

2022. 6. 6. 15:34·SPRING
728x90

영속성 전이

  • 특정 엔티티를 영속 상태로 만들 경우 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용
  • 예를 들자면 부모엔티티를 저장할 경우 자식엔티티도 함께 저장 (자식의 연관관계가 두개 이상인 경우 사용하면 안됨)

영속성 전이 옵션 

옵션 설명
CascadeType.ALL 모두 적용
CascadeType.PERSIST 영속
CascadeType.MERGE 병합
CascadeType.REMOVE 삭제
CascadeType.REFRESH 리프레쉬
CascadeType.DETACH DETACH
  • 실무에서는 보통 ALL / PERSIST / REMOVE 옵션을 사용

Persist 옵션

@Entity
@Getter
@Setter
public class Parent {

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

    @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
    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;

}
  • Parent가 Child를 관리가 가능하도록 Persist 옵션을 줌
Child child1 = new Child();
Child child2 = new Child();

Parent parent = new Parent();
parent.addChild(child1);
parent.addChild(child2);

entityManager.persist(parent);

entityTransaction.commit();

// Persist옵션이 없는 경우 아래처럼 호출해야함
// entityManager.persist(child1);
// entityManager.persist(child2);
// entityManager.persist(parent);
  • Parent가 저장되면서 Child도 같이 추가됨 
  • 해당 옵션만 추가한 상태에서 영속성컨텍스트를 초기화하고 Parent로 삭제할 경우 자식 삭제쿼리가 동작하지 않음 (Remove옵션으로 해결해야함)

Remove 옵션

  • 부모 엔티티를 삭제할때 연관되어 있는 자식엔티티를 같이 삭제

ALL 옵션

  • Persist + Remove 옵션 합친 옵션
  • 자식엔티티를 관리하는 부모 엔티티가 하나일 경우에만 사용해야하며, 라이프 사이클이 같을 경우 사용하는 것이 좋음

 

저작자표시

'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)
  • 최근 글

  • 태그

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

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[SPRING] JPA 영속성 전이
상단으로

티스토리툴바