No entity found for query 에러

2022. 6. 1. 03:11ERROR

서비스 계층에서, 회원 가입 시 입력한 아이디와 같은 ID를 사용중인지 체크하고자 한다.
위의 코드는 리포지토리에서 작성한 코드인데, No entity found for query 에러가 발생했다.

이는 쿼리문이 잘못되었다기 보다는 동일한 ID를 가진 엔티티가 없어서, getSingleResult()에서 에러가 발생한 것으로 보인다.

getSingleResult()는 결과가 null일 경우 따로 처리를 해주어야 한다. 
Optional을 사용하는 것이 null체크 코드보다 깔끔하므로 아래와 같이 코드를 수정했다. 

public Optional<Member> findMemberByLoginId(String loginId){
    List<Member> members =  em.createQuery("select m from Member m where m.loginId = :loginId", Member.class)
            .setParameter("loginId", loginId)
            .getResultList();

    return members.stream().findAny();
}