🫡jpa를 이용하여 단방향 연관관계를 맺은 후 작업을 진행하던 와중
parent를 삭제 할 경우 외래키 제약에 의해 삭제가 안돼는 상황이 발생하였습니다.
@Entity
public class Address extends BaseEntity {
@ManyToOne(fetch=LAZY)
private Member member;
}
😎단방향 연관관계를 맺은 상황에서 Member를 삭제할 경우 외래키 제약으로 인해 삭제가 안되었습니다.
이를 해결하는 방법은 아래와 같습니다.
cascade
걸어주기
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<Address> addresses = new ArrayList<>();
🫠위와 같이 해줄 경우 cascade
를 통해 member를 삭제하게 되면 해당 address들도 삭제가 됩니다.
address 중에 삭제하려고 member를 참조하는 객체를 먼저 삭제하고 나서 member를 삭제하는 방식입니다.
@OnDelete
@ManyToOne(fetch=LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
private Member member;
🥳위의 어노테이션의 경우 cascade
와 같은 효과를 가지게 되는데 단 위 효과는 ddl-auto create
에서만 작동합니다.