Untitled

user 테이블에서 레코드를 삭제하려고 시도하지만 participant 테이블에서 이 사용자를 참조하는 외래 키 제약 조건이 있어 MySQL이 참조 무결성을 유지하기 위해 삭제를 거부해서 발생하는 문제

외래키를 가지고 있는 Entity들에 cascade = CascadeType.ALL을 추가

Untitled

Untitled

<aside> ⚠️ 양방향 관계라면 ?

</aside>

Untitled

LikeablePerson 엔터티가 User 엔터티와 양방향 관계를 가지며, LikeablePerson 엔터티가 User 엔터티에 연쇄 삭제를 수행하도록 설정하면 순환 참조 문제가 발생 가능.

해결 방법으로는 다음과 같이 수정 가능.

javaCopy code
@ManyToOne
@Setter
private User fromUser; // 호감을 표시한 사람

@ManyToOne
@Setter
private User toUser; // 호감을 받은 사람

연쇄 삭제 설정을 제거하여 LikeablePerson 엔터티가 User 엔터티에 대한 연쇄 삭제를 수행하지 않도록 합니다.

사용자 삭제 시 LikeablePerson 레코드를 수동으로 삭제

**User**를 삭제할 때 LikeablePerson 레코드를 수동으로 삭제. 다음과 같이 LikeablePerson 레코드를 삭제.

javaCopy code
@Transactional
public void deleteUser(String userId) {
    // 사용자와 관련된 모든 LikeablePerson 레코드 가져오기
    List<LikeablePerson> likeablePersonsToDelete = likeablePersonRepository.findByFromUserUserIdOrToUserUserId(userId, userId);

    // 각 LikeablePerson 레코드 삭제
    for (LikeablePerson likeablePerson : likeablePersonsToDelete) {
        likeablePersonRepository.delete(likeablePerson);
    }

    // 이제 사용자를 안전하게 삭제할 수 있습니다.
    userRepository.deleteByUserId(userId);
}