본문 바로가기

에러사항 모음

query did not return a unique result

컨트롤러를 테스트 하는 중 위 에러가 발생했다. 해석하면 "고유한 결과를 반환시키지 못함" 인데..

원인은

@GetMapping
	public ResponseEntity<UserEntity.Response> emailInquiry(@RequestBody UserEntity.Request request){
		System.out.println(request);
		UserEntity getEmail = userRepository.findByEmail(request.getEmail());
		UserEntity.Response res = UserEntity.Response.toResponse(getEmail);
		
		return ResponseEntity.ok().body(res);
	}

여기에 있다. 이메일로 회원을 찾는 컨트롤러 메소드이다. 에러를 자세히 보면

고유한 결과가 2개라고 나온다. 이 뜻은 정확히 말하면 DB에 등록된 서로 다른 유저의 정보 중 이메일이 중복된 값으로 2개가 저장되어 있는데, emailInquiry 메소드는 이 두 개 중 어느 것을 반환시킬지 알지 못한다. 따라서 위와 같은 에러가 발생한 것이다. 따라서 같은 이메일을 가진 여러 유저를 한 번에 조회하고 싶다면 아래 코드처럼 List를 써야할 것이다.

public List<UserEntity.Response> emailsInquiry(@RequestBody UserEntity.Request request){
		System.out.println(request);
		
		List<UserEntity> getEmail = userService.findAllEmail(request.getEmail());
		
		List<UserEntity.Response> res = UserEntity.Response.toResponseList(getEmail);
		
		return res;

그런데 서로 다른 회원이 같은 이메일 주소를 가질 수는 없다.

따라서 DB쪽에서 필드 값을 UNIQUE로 만들어 중복을 없앤다던가, 따로 예외처리를 시켜야 할 것이다. 위 코드는 단순 연습용이고 다른 쪽으로 응용할 수 있을 것 같아 기록을 남긴다.