오봉이와 함께하는 개발 블로그
스프링 데이터 JPA - 반환 타입 본문
728x90
반환 타입
스프링 데이터 JPA는 유연한 반환 타입을 지원한다.
List<Member> findByUsername(String name); //컬렉션
Member findByUsername(String name); //단건
Optional<Member> findByUsername(String name); //단건 Optional (null일 수도 아닐 수도 있다.)
Optional
을 사용했을 때 결과가 2개 이상이면 IncorrectResultSizeDataAccessException
이 발생한다.Optional
은 결과가 null
이거나 1개(단건
)가 나와야 하기 때문인데, 사실 javax.persistence.NonUniqueResultException
예외가 발생하지만 스프링이 바꿔서 예외를 반환한다.
스프링이 추상화 하는 예외에 의존하면 다른 기술(DB 교체 등)을 사용하는 리포지토리를 사용해도 동일한 예외를 내려주기 때문에 예외를 사용하는 클라이언트 코드를 바꾸지 않아도 된다.
- 스프링 데이터 JPA 공식 문서 : https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-return-types
조회 결과
조회 결과가 많거나 없으면 어떻게 될까
- 컬렉션
- 결과 없음 : 빈 컬렉션 반환
- 단건 조회
- 결과 없음 : null 반환
- 결과가 두 건 이상 : javax.persistence.NonUniqueResultException 예외 발생
참고로 단건으로 지정한 메서드를 호출하면 스프링 데이터 JPA는 내부에서 JPQL의 Query.getSingleResult()
메서드를 호출한다.
메서드를 호출했을 때 조회 결과가 없으면 javax.persistence.NoResultException
예외가 발생하는데 개발자 입장에서 다루기가 상당히 불편하다.
스프링 데이터 JPA는 단건을 조회할 때 이 예외가 발생하면 예외를 무시하고 대신에 null
을 반환한다.
인프런 김영한 지식공유자님 강의 : 실전! 스프링 데이터 JPA
728x90
'BE > JPA' 카테고리의 다른 글
스프링 데이터 JPA - 스프링 데이터 JPA 페이징과 정렬 (0) | 2022.09.13 |
---|---|
스프링 데이터 JPA - 순수 JPA 페이징과 정렬 (0) | 2022.09.13 |
스프링 데이터 JPA - 파라미터 바인딩 (0) | 2022.09.08 |
스프링 데이터 JPA - @Query(리포지토리 메소드에 쿼리 정의하기, 값, DTO 조회하기) (0) | 2022.09.08 |
스프링 데이터 JPA - JPA NamedQuery (0) | 2022.09.08 |
Comments