본문 바로가기

Web/Spring

[Web / Spring] EntityManager로 JPQL 사용 시 단일 Entity 찾기 ( No entity found for query )

문제 상황

회원 가입을 할 때, 원래 PK로 설정된 name으로 중복 검사를 했는데 email로 검사하는 것으로 바꿨다.

그런데 이전에 회원가입한 회원은 로그인이 되는데, 신규 회원가입은 되지 않는 상황이 발생했다.

findByEmail 메소드

 

query를 날린 결과

findByEmail 메소드에서 에러를 뿜고 있었다. No entity found for query라는 것을 보고 두 가지 생각이 났다.

1. query가 잘못됐다.

2. query는 정상이고 말 그대로 query에 맞는 entity를 찾지 못했다.

 

신규 회원가입자는 DB에 없는 email을 넣어야 회원 가입이 되므로 당연히 query의 결과로는 아무것도 없어야 한다.

결국 No entity found for query라는 에러의 의미는 query의 결과 중복되는 email이 없다는 것이다.

다만 findByEmailgetSingleResult()로는 이렇게 결과가 null일 경우 따로 null 체크를 하는 코드를 작성해야한다.

 

null체크를 하는 것 보다 Optional을 이용하는 것이 더 깔끔하고 null값을 포함한다는 의미도 가지고 있으므로 .getSingleResult().getResultList()로 바꾸어 findAny로 Optional을 리턴하기로 하였다.

.getSingleResult() -> .getResultList()