스프링 데이터 JPA는 유연한 반환 타입을 지원한다.
List<Member> findListByUsername(String username);
Member findMemberByUsername(String username);
Optional<Member> findOptionalByUsername(String username);
이런 다양한 반환 타입을 지원한다.
@Test
public void returnType() {
Member m1 = new Member("AAA", 10);
Member m2 = new Member("BBB", 20);
memberRepository.save(m1);
memberRepository.save(m2);
List<Member> result1 = memberRepository.findListByUsername("AAA");
assertThat(result1.size()).isEqualTo(1);
Member result2 = memberRepository.findMemberByUsername("AAA");
assertThat(result2).isEqualTo(m1);
Optional<Member> result3 = memberRepository.findOptionalByUsername("BBB");
assertThat(result3.get()).isEqualTo(m2);
}
컬렉션 조회의 경우 데이터가 없을 경우 null이 아니라 빈 컬렉션을 반환한다.
문제는 단건 조회이다. 결과가 없는 경우 null을 리턴 한다.
<aside> 💡 가능하면 optional을 사용하는게 좋지 않을까?
</aside>
JPA의 경우 결과가 없으면 no result exception이 뜬다.
만약 Optional 조회 했는데 결과가 2개 이상이면 예외가 발생한다.