최대 1 분 소요

스프링 데이터 JPA는 유연한 반환 타입 지원

1
2
3
List<Member> findByUsername(String name); // 컬랙션
Member findByUserName(String name);  // 단건
Optional<Member> findByUsername(String name); // 옵셔널 단건

스프링 데이터 JPA 공식 문서

조회 결과가 많거나 없으면?

  • 컬랙션
    • 결과 없음 : 빈 컬랙션 반환
1
2
3
4
List<Member> aaa = memberRepository.findListByUsername("AAA");
if(aaa != null) {
 .... 
}

이러면 안된다. aaa 의 결과가 없더라도 aaa는 빈 객체라 null이 아니다.

  • 단건 조회
    • 결과 없음 : null반환
    • 결과가 2건 이상 : javax.persistence.NonUniqueResultException 예외 발생
    • 결론 : 옵셔널 쓰자 ~ 옵셔널에 대해 좋은 글

참고 : 단 건으로 지정한 메서드를 호출하면 스프링 데이터 JPA는 내부에서 JPQL의 Query.getSingleResult()를 호출한다. 이 메서드를 호출 했을 때 조회 결과가 없으면 javax.persistence.NoResultException예외가 발생하는데 개발자 입장에서 다루기가 상당히 불편하다. 스프링 데이터 JPA는 단 건 조회할 때 이 예외가 발생하면 예외를 무시하고 null을 반환한다.

태그: ,

카테고리:

업데이트:

댓글남기기