• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

안녕하세요! Exception 관련 질문드립니다!

21.09.06 13:48 작성 조회수 166

0

안녕하세요! 6월 방학부터 개학한 오늘까지 김영한님의 모든 강의를 들으며 많은 깨달음을 얻고 실력을 키웠습니다.

먼저, 정말 좋은 강의를 해주셔서 감사하다는 말씀을 드립니다!

제가 질문드리고 싶은건 NoResultException입니다!

JpaReopsitory<T,ID>를 상속받는 레포지토리는

Member findByUsername(String username) 를 하고

memberRepository.findByUsername("DB에 없는 username") 을 할시에 null이 들어가면서 exception이 터지지 않는데

MemberRepository.java

public Member findByUsernmae(String username) {
return em.createQuery("select m from Member m where m.username=:username", Member.class)
.setParameter("username", username)
.getSingleResult();
}

memberJpaRepository.findByUsername("DB에 없는 값")을 할시에는 Exception이 터집니다.

먼저, Repository 내에서 NoResultException이 터지고 Repository에서 나갔을때는 EmptyResultDataAccessException이 터지는거에 궁금했었는데 이건 방금 강의에서 말씀해주셔서 아! 하고 알았습니다.

하지만, JpaRepository를 상속받은 레포지토리는 같은 쿼리를 날리지만 어떤 원리로 exception이 터지지 않고 null이 들어가는지 궁금합니다!

혹시, JpaRepository인터페이스를 구현한 클래스에서 Exception을 잡은다음에 null로 뿌려주는것일까요?

감사합니다!

답변 1

답변을 작성해보세요.

1

안녕하세요. 박상호님

생각하신 내용이 맞습니다.

처음에 JPA 스펙을 정의할 때는 하나의 데이터를 조회하는 getSingleResult()가 데이터가 없는 경우 예외를 발생하도록 정의했습니다. 그런데 개발자들이 막상 개발을 해보니 데이터가 없을 때 예외가 터지는 것 보다는 null을 받는 것이 더 편리하다고 생각했지요. 그래서 스프링 데이터 JPA는 이 경우 예외를 잡아서 null로 반환하도록 해줍니다.

감사합니다.

박상호님의 프로필

박상호

질문자

2021.09.06

감사합니다!!!