반응형
영속성 전이: CASCADE
JPA 영속성 전이(CASCADE)는 부모 엔티티의 작업이 자식 엔티티로 전파되도록 설정하는 기능입니다. 부모 엔티티의 변경이나 삭제 작업이 연관된 자식 엔티티에 자동으로 전파됨으로써 데이터의 일관성을 유지합니다. 또 중복된 코드 없이 객체 간의 연관 작업을 간편하게 처리함으로 개발 생산성을 높일 수 있습니다.
사용법은 다음과 같이 cascade 옵션을 지정해 주면 됩니다. `CascadeType.ALL`으로 설정하여 모든 작업을 자식 엔티티로 전파하는 예제 코드입니다.
@Entity
public class Parent {
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
private List<Child> children;
// ...
}
@Entity
public class Child {
@ManyToOne
@JoinColumn(name = "parent_id")
private Parent parent;
// ...
}
Cascade 종류
- PERSIST(영속): 부모 엔티티를 저장할 때 연관된 자식 엔티티도 함께 저장됩니다.
- MERGE(병합): 부모 엔티티의 변경이 자식 엔티티로 전파되어 업데이트 됩니다.
- REMOVE(삭제): 부모 엔티티의 삭제 작업이 연관된 자식 엔티티에도 적용됩니다.
- REFRESH(갱신): 부모 엔티티의 변경 사항이 자식 엔티티에도 반영됩니다.
- DETACH(분리): 부모 엔티티의 분리 작업이 자식 엔티티에도 영향을 미칩니다.
- ALL: 모두 적용됩니다.
고아 객체 제거
고아 객체란?
연관 관계에서 부모 엔티티의 참조가 사라진 자식 엔티티를 의미합니다. 이때 고아 객체 제거 옵션을 설정하면 참조가 사라졌을 때 자동으로 자식 엔티티를 삭제할 수 있습니다. 더 이상 사용되지 않는 자식 엔티티를 즉시 제거하여 불필요한 데이터를 방지할 수 있고, 부모 자식 간의 연관 관계를 통해 데이터 일관성을 높이고 관리를 효율적으로 할 수 있습니다.
@Entity
public class Parent {
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Child> children;
// ...
}
`Parent` 엔티티에서 `orphanRemoval = true`를 통해 고아 객체 제거를 설정할 수 있습니다. 이 설정을 통해 부모 엔티티에서 자식 엔티티를 제거하면 해당 자식 엔티티는 자동으로 삭제됩니다.
반응형
'Spring Data > JPA' 카테고리의 다른 글
JPA JPQL(객체 지향 쿼리 언어)를 완벽히 이해해보자 (0) | 2023.08.23 |
---|---|
JPA '값 타입'의 선언과 활용, @AttributeOverride와 @ElementCollection, @CollectionTable 역할 (1) | 2023.08.23 |
JPA 프록시와 지연로딩: 성능 최적화를 위한 기술(방법) (0) | 2023.08.22 |
JPA 상속 관계 매핑 방법과 공통 매핑하는 방법 (0) | 2023.08.21 |
JPA 연관관계 매핑: 객체 간의 관계를 표현하고 데이터베이스에 저장 (0) | 2023.08.18 |