프로그래밍/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;
}
현재 부모 번호 11과 그 자식 2개가 존재한다.
아래의 코드를 수행해보자.
Parent parent = em.find(Parent.class, 11L);
em.remove(parent);
PK 11을 가지는 엔티티를 삭제하는 코드이다.
DELETE SQL을 총 3번 실행한다.
외래 키 제약조건을 고려하여 자식 2개를 먼저 제거하고,
부모 엔티티를 제거했다.