@정윤지

외래키 제약 조건 위반 에러 회고

직원 삭제 API 실행 시 외래키 제약 조건 위반 에러 발생


Referential integrity constraint violation:
"FK6NL7LF5SW4TXK4790B5881RCL: PUBLIC.EMPLOYEES FOREIGN KEY(PROFILE_IMAGE_ID) REFERENCES PUBLIC.FILES(ID)"

원인 분석

잘못된 삭제 순서


// 문제가 된 기존 코드
if (employee.getProfileImage() != null) {
    File profileImage = employee.getProfileImage();

// ❌ File을 먼저 삭제 시도
    fileRepository.deleteById(profileImage.getId());
}
// ❌ Employee를 나중에 삭제
employeeRepository.deleteById(employeeId);

해결 방법

삭제 순서 변경


java
// 수정된 코드
@Override
@Transactional
public void delete(Long employeeId) {
    Employee employee = employeeRepository.findById(employeeId)
        .orElseThrow(() -> new NoSuchElementException("Employee not found"));

// 1️⃣ 프로필 이미지 정보를 미리 저장
    File profileImageToDelete = employee.getProfileImage();

// 2️⃣ Employee를 먼저 삭제 (외래키 참조 제거)
    employeeRepository.deleteById(employeeId);

// 3️⃣ File을 나중에 삭제 (더 이상 참조되지 않음)
    if (profileImageToDelete != null) {
        deletePhysicalFile(profileImageToDelete);
        fileRepository.deleteById(profileImageToDelete.getId());
    }
}

배운 점