본문 바로가기
Error

[Java / Spring / JPA / Error] - Query did not return a unique result: 7 results were returned

by nam_ji 2024. 8. 24.

Query did not return a unique result: 7 results were returned

에러 내용

  • 파일 업로드 기능 구현 중 마주한 에러입니다.
  • 프론트에서 업로드를 하면 alert으로 '해당 파일명'이 저장되었습니다. 또는 에러 내용을 보여주게 되는데 갑자기 undefined와 함께 console에 에러가 나타났습니다.
  • 번역기를 돌려봤더니
    쿼리가 고유한 결과를 반환하지 않았습니다. 7개의 결과가 반환되었습니다.​
    이렇게 해석되었고 생각해보니 왜 7개의 결과가 반환되지? 해서 찾아보니
  • 중복을 허락하지 않는 코드를 테스트 때문에 잠시 주석으로 막아두고 테스트 했더니 같은 파일이 여러개 들어가 있었고 중복 체크 코드의 주석을 풀고 생긴 에러입니다. 중복을 허락하지 않는다는 얘기는 반환 값이 1개이기 때문에 여러개의 데이터가 반환되면 안됩니다.

원인 코드

  • findByAll이 아닌 findBy이고 List가 아닙니다.
public void findExtension(String name) {
    FixedExtension findFixedExtension = fixedExtensionRepository.findByExtensionName(name);
    CustomExtension findCustomExtension = customExtensionRepository.findByCustomExtensionName(name);

    if ((findFixedExtension != null || findCustomExtension != null)) {
      throw new CustomException(ErrorCode.DUPLICATE_EXTENSION);
    }
  }
  • 여기 또한 findByAll이 아닌 findBy이고 List가 아니기 때문에 반환을 받지 못했던 겁니다.
FixedExtension findByExtensionName(String name);

 

CustomExtension findByCustomExtensionName(String extensionName);
  • DB 상태 같은 파일이 여러개 저장되어 있어 반환 값이 하나여야 하지만 여러개라 생긴 에러입니다.


해결 방법

  • 반환 타입을 List로 수정하거나 데이터 중복을 체크하는 로직이 있어야 합니다.
  • 제 코드의 경우 중복이 있으면 안되기 때문에 중복 데이터를 지워주고
  • 중복 체크 로직을 추가하여 문제를 해결했습니다.