프로그래밍/JPA

[JPA] 영속성 전이(CASCADE): 삭제

승민아 2023. 8. 18. 16:14

부모와 자식 엔티티를 제거하려면 자식 엔티티를 하나씩 제거하고 부모 엔티티를 제거해야한다.

영속성 전이는 저장뿐만아니라 삭제도 가능하다.

부모 엔티티만 제거하면 자식 엔티티도 함께 제거하게 할 수 있는 것이다.

 

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;
}

 

DB 상태

현재 부모 번호 11과 그 자식 2개가 존재한다.

아래의 코드를 수행해보자.

 

Parent parent = em.find(Parent.class, 11L);
em.remove(parent);

PK 11을 가지는 엔티티를 삭제하는 코드이다.

 

DELETE SQL을 총 3번 실행한다.

외래 키 제약조건을 고려하여 자식 2개를 먼저 제거하고,

부모 엔티티를 제거했다.