jpa 단방향 연관관계 cascade 설정

greenTea·2023년 6월 26일
0

cascade 문제 발생

🫡jpa를 이용하여 단방향 연관관계를 맺은 후 작업을 진행하던 와중
parent를 삭제 할 경우 외래키 제약에 의해 삭제가 안돼는 상황이 발생하였습니다.

@Entity
public class Address extends BaseEntity {

    @ManyToOne(fetch=LAZY)
    private Member member;
}

😎단방향 연관관계를 맺은 상황에서 Member를 삭제할 경우 외래키 제약으로 인해 삭제가 안되었습니다.

이를 해결하는 방법은 아래와 같습니다.


해결 방법

1. 양방향 관계 설정 후 cascade 걸어주기

	
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Address> addresses = new ArrayList<>();

🫠위와 같이 해줄 경우 cascade를 통해 member를 삭제하게 되면 해당 address들도 삭제가 됩니다.

2. 직접 삭제

address 중에 삭제하려고 member를 참조하는 객체를 먼저 삭제하고 나서 member를 삭제하는 방식입니다.

3. @OnDelete

	@ManyToOne(fetch=LAZY)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Member member;

🥳위의 어노테이션의 경우 cascade와 같은 효과를 가지게 되는데 단 위 효과는 ddl-auto create에서만 작동합니다.

profile
greenTea입니다.

0개의 댓글