[Trouble Shooting] javax.persistence.nonuniqueresultexception: query did not return a unique result: 8 해결
문제 상황
서버 api 를 클리이언트와 연동하며 문제가 발생했다.
혼자 테스트 할 때에는 잘 실행되던 api가 query did not return a unique result
를 뿜었다.
문제 원인
이 글을 참고했다.
내가 진행하는 프로젝트에서는 동물 보호가 종료되면, 다시보기 컨텐츠(Record
)를 생성한다.
이때 보호 종료 api를 두 번 이상 호출하지 못하도록 막았어야 했는데,
해당 예외 처리를 안하는 바람에 Record
가 여러번 생성되어 충돌한 것이었다.
해결 방법
record
를 여러번 생성할 수 없도록 예외 처리를 했다.
@Service
@RequiredArgsConstructor
public class ProtectionServiceImpl implements ProtectionService {
// 보호 종료
public void saveEndStatus(ProtectionEndReqDto protectionEndReqDto) {
...
Pet pet = findPet(protectionEndReqDto.getPet(), user);
if (pet.getProtectionEndedAt() != null) {
throw new CustomException(PET_PROTECTION_ALREADY_ENDED); // 👉 이미 보호가 종료된 동물은 다시보기 record를 또 생성할 수 없도록 예외 처리 로직 추가
}
...
// 다시보기 record 생성
recordRepository.save(record);
...
}
}
💛 개인 공부 기록용 블로그입니다. 👻