발생한 오류
판매자 회원이 회원가입 시, 중복 이메일로 가입되지 않게
데이터베이스에 가입하려는 이메일이 존재하는지 확인하
테스트하였는데, 아래와 같은 오류가 발생하였습니다.
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 |
---|
댓글