관리 메뉴

Just Do it

[스프링] Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2 본문

신입 개발자가 되기 위해 공부했던 독학 자료들/에러 해결 모음

[스프링] Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

Seojoo21 2022. 3. 22. 23:47

1. 에러 

개인 프로젝트인 SJBoard에서 회원 아이디 찾기 기능을 구현하고자 하였다. 그래서 비즈니스 계층에서 사용자가 입력한 email 주소를 가지고 아이디를 찾는 메서드를 선언 및 구현한 후 테스트 파일에서 정상 동작하는지 테스트 하였다. 그런데 아래와 같은 에러를 만났다.  

 

Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

해석해보니 이 에러는 select 문에서 결과값이 없거나(null) 하나여야만 하는데 두 개 이상 나올 때 발생하는 에러였다.  

 

2. 원인

비즈니스 계층에서 선언한 메서드의 반환타입이 문제였다.

MemberService 인터페이스에 회원 아이디를 찾는 메서드를 아래와 같이 선언하였는데, 현재 프로젝트의 경우 이메일 주소 하나로 아이디를 여러 개 가입할 수 있기 때문에 여러 개의 아이디가 조회될 경우 위와 같은 에러가 발생하는 것이었다.  

 

3. 해결 

해당 메서드의 반환 타입을 아래와 같이 List<MemberVO>로 수정하였다. 아이디가 여러 개가 나올 경우 List 컬렉션에 각각의 MemberVO 객체로 저장될 수 있도록 하였더니 테스트 결과 에러 없이 실행되었다.