IT&Programming/Error fix

NonUniqueResultException

YongE 2024. 3. 26. 01:09

JPA로 프로젝트 진행 중에 다음과 같은 에러메세지를 만났다.

 

Spring log 중 하나

 

NonUniqueResultException: Query did not return a unique result: 3 results were return.

 

"Non Unique Result"

유니크하지 않는 결과에 대한 에러다.

 

전체적으로 읽어보니 query 값이 하나만 반환돼야 하는데 3개가 반환 되는 것 아니겠나?

 

밥공기를 하나만 들고 갔는데 세 공기 분량을 주면 당연히 하나에 전부 못 담는다. (고봉밥 제외)

 

public String getRice(String name){
	Rice r = riceRepository.findByRiceName(name);
    return r.name;
}

 

위와 같은 코드를 작성했다고 하자. 찾고자 하는 밥 종류의 이름을 DB에서 찾아서, 있다면 이름을 반환하는 코드다.

 

오류가 나는 부분은 2줄이다. findByRiceName함수로 이름에 맞는 밥종류를 찾아서 반환한다.

그런데 만약 이름에 맞는 밥종류가 2개 이상이다!

 

이러면 단일 객체만 받는 변수에서 결과값을 다 받을 수가 없다.

 

public String getRice(String name){
	List<Rice> rs = riceRepository.findByRiceName(name);
    return "총 갯수는 " + rs.length + "개이다.";
}

 

위처럼 결과값을 받는 변수를 배열로 만들면 오류는 더 이상 생기지 않는다.

 

혹은, 단일 결과만 반환할 수 있도록 repository 인터페이스에 jpa query를 직접 정의하는 것도 방법이다.

 

무엇을 고를지는 프로젝트의 성격에 따라 유동적으로 정하면 된다.

728x90
반응형