본문 바로가기
JPA

javax.persistence.NoResultException: No entity found for query 오류 발생 시 해결방법

by haroutine 2022. 12. 7.
발생한 오류

판매자 회원이 회원가입 시, 중복 이메일로 가입되지 않게

데이터베이스에 가입하려는 이메일이 존재하는지 확인하

테스트하였는데, 아래와 같은 오류가 발생하였습니다.

javax.persistence.NoResultException: No entity found for query

해당 오류는 판매자 회원이 입력한 이메일이 데이터베이스에 존재하지 않을 경우,

NoResultException 오류가 발생하였습니다.

 

오류가 발생한 원인

저 같은 경우,  getSingleResult() 함수를 사용했을 때,

결과값이 없을 경우 발생하는 에러였습니다( = null 일 경우 오류 발생)

 

return (Seller) em.createQuery("select s from Seller s where email = :email", Seller.class)
                .setParameter("email", email)
                .getSingleResult();

 

추가로, getSingleResult() 함수는 2개 이상 나왔을 때도

NonUniqueResultException이라는 오류가 발생시키기 때문에 

"결과값이 없거나, 2개 이상의 결과값이 나올 수 있는 경우에 쓰는 것은 적합하지 않다"는 것을

알게 되었습니다.

 

getSingleReulst 함수는 아래 출처에서 상세히 확인하실 수 있습니다

https://docs.oracle.com/javaee/7/api/javax/persistence/Query.html#getSingleResult--

 

해결방법

getSingleResult() 함수 대신

결과 값이 없을 경우, 빈 배열을 반환하는 getResultList() 함수를 대체하여 사용하였습니다

 

 return em.createQuery("select s from Seller s where email = :email", Seller.class)
                .setParameter("email", email)
                .getResultList();

 

 

 

 

 

 

 

 

반응형

'JPA' 카테고리의 다른 글

JPA @Id 값이 2부터 시작되는 오류  (0) 2023.01.03

댓글