
BookDonationEvent를 삭제할 때 연결된 Book까지 함께 삭제된다.orphanRemoval = true 설정 때문에, 연관 관계가 끊어진 Book 엔터티가 데이터베이스에서 자동 삭제된다.JPA의 orphanRemoval = true 설정은, 부모 엔터티에서 자식 엔터티의 참조가 제거될 때, 해당 자식 엔터티도 데이터베이스에서 삭제된다.
deleteDonationEvent 메소드에서 연관관계를 끊는 동작(removeBook)을 하면서 Book 엔터티가 데이터베이스에서 삭제되었다..
CascadeType.REMOVE를 이용해서 해결 한다.
부모 엔터티가 삭제될 때, 연관된 자식 엔터티도 함께 삭제할 것인가를 결정한다.
연관 관계를 먼저 끊고, 그 후 BookDonationEvent를 삭제한다.
/**
* 양방향
*/
@OneToMany(fetch = FetchType.LAZY, mappedBy = "bookDonationEvent", cascade = CascadeType.REMOVE)
private List<Book> books = new ArrayList<>();
이처럼 양방향으로 설정한 이후 케스케이드를 사용해서 둘다 삭제해야할때는 그냥 삭제
하나만 삭제 해야 할때는 연관관계를 해제하고 삭제한다.
/**
* 연관 관계 삭제
* 도서와 나눔 이벤트 간의 연관 관계 삭제
*/
int bookSize = bookDonationEvent.getBooks().size();
for (int i = bookSize - 1; i >= 0; i--) {
bookDonationEvent.getBooks().get(i).changeStatus(BookStatusEnum.POSSIBLE);
bookDonationEvent.removeBook(bookDonationEvent.getBooks().get(i));
}