[스프링] JPA 영속성 전이(Cascade)

JPA(Java Persistence API)에서 영속성 전이는 부모 엔티티와 관련된 자식 엔티티의 상태 변경을 부모 엔티티에 전파하는 메커니즘을 말합니다. 이를 통해 부모 엔티티의 상태 변화에 따라 자식 엔티티의 상태도 자동으로 변경됩니다.

영속성 전이의 종류

JPA는 다양한 영속성 전이 유형을 제공합니다. 각각의 전이 유형에 따라 부모와 자식 엔티티 간의 상태 전이 방식이 달라집니다. 주요 영속성 전이 유형에는 다음과 같은 것들이 있습니다.

  1. ALL: 모든 작업(추가, 수정, 삭제)에 대해 전이됩니다.
  2. PERSIST: 부모 엔티티가 영속 상태로 전이될 때 자식 엔티티도 함께 영속 상태로 전이됩니다.
  3. MERGE: 부모 엔티티가 병합될 때 자식 엔티티도 함께 병합됩니다.
  4. REMOVE: 부모 엔티티가 삭제될 때 자식 엔티티도 함께 삭제됩니다.

예제 코드

아래는 JPA에서 영속성 전이를 사용하는 간단한 예제 코드입니다.

@Entity
public class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
    private List<Child> children;
    
    // getters and setters
}

@Entity
public class Child {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    private Parent parent;
    
    // getters and setters
}

위의 예제에서 Parent 엔티티는 Child 엔티티와 일대다 관계를 가지며, cascade 속성을 통해 영속성 전이를 설정하였습니다. 이를 통해 Parent 엔티티의 상태가 변할 때 Child 엔티티에도 해당 전이가 자동으로 적용됩니다.

결론

JPA의 영속성 전이를 적절히 활용하면 부모-자식 관계의 엔티티 간 상태 전이를 간편하게 처리할 수 있습니다. 다만, 영속성 전이를 사용할 때에는 신중한 고려가 필요하며, 데이터 일관성과 정합성을 유지하기 위해 신중한 설계가 필요합니다.

참고 문헌: Baeldung - JPA Cascade Types

이상으로 JPA의 영속성 전이에 대한 내용을 정리해보았습니다. 부족한 부분이 있다면 추가로 알려주시면 감사하겠습니다.