쌓고 쌓다
[JPA] 영속성 전이(CASCADE): 삭제 본문
부모와 자식 엔티티를 제거하려면 자식 엔티티를 하나씩 제거하고 부모 엔티티를 제거해야한다.
영속성 전이는 저장뿐만아니라 삭제도 가능하다.
부모 엔티티만 제거하면 자식 엔티티도 함께 제거하게 할 수 있는 것이다.
Parent
@Entity
@Getter
@Setter
public class Parent {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "parent", cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
private List<Child> child = new ArrayList<>();
}
cascade = {CascadeType.PERSIST, CascadeType.REMOVE}
영속성 저장과 삭제를 함께 속성을 지정했다.
Child
@Entity
@Getter
@Setter
public class Child {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "parent_id")
private Parent parent;
}
현재 부모 번호 11과 그 자식 2개가 존재한다.
아래의 코드를 수행해보자.
Parent parent = em.find(Parent.class, 11L);
em.remove(parent);
PK 11을 가지는 엔티티를 삭제하는 코드이다.
DELETE SQL을 총 3번 실행한다.
외래 키 제약조건을 고려하여 자식 2개를 먼저 제거하고,
부모 엔티티를 제거했다.
'프로그래밍 > JPA' 카테고리의 다른 글
양방향 연관관계 매핑 JSON 순환참조 문제 (0) | 2023.08.19 |
---|---|
[JPA] 고아 객체 제거 + orphanRemoval 동작하지 않을때 (0) | 2023.08.18 |
[JPA] 영속성 전이(CASCADE): 저장 (0) | 2023.08.17 |
[JPA] 프록시와 즉시로딩, 지연로딩 (0) | 2023.08.16 |
일대일 연관관계 매핑 @OneToOne (0) | 2023.08.05 |
Comments