[JPA]단건 vs List 조회시 null

정태규·2023년 12월 21일
0

JPA

목록 보기
1/4
@Test
    public void returnType() {
        Member m1 = new Member("CCC", 10);
        Member m2 = new Member("DDD", 10);
        memberRepository.save(m1);
        memberRepository.save(m2);

        List<Member> members = memberRepository.findListByUsername("AAA");
        Member member = memberRepository.findMemberByUsername("AAA");
				Optional<Member> findMember = memberRepository.findOptionalByUsername("asdfsdf");
    }

위에서 findListByUsername()은 List로 반환하고,

findMemberByUsername은 Member 객체 하나를 반환한다.

만약 두 반환값 모두에서 조회되는 값이 없다면 어떻게 될까??

결론을 먼저 말하자면

  • List로 받는다면 null 값이 아니라 빈 객체가 반환되고, members.size()를 찍어본다면 값이 0 이나온다.
  • Member 객체로 받는다면 null이 반환된다.

사실 Member 객체가 조회된 값이 없을때, 순수 jpa에서는 NoResultException이 터진다. 하지만 Spring data jpa에서는 Exception을 try-catch로 감싸서 null을 리턴 해주도록 만든다.

null을 리턴해주는 것도 Exception이 터지는 것보다는 좋지만, 더 좋은건 Optional을 사용하는 것이다. optional은 조회값이 없을 때, Optional.empty 로 반환한다.

그리고 Optional에 좋은점은 null일때 이렇게 뒤에 코드를 작성할 수 있다는 것이다.

findMember.orElse()
findMember.orElseGet()

📗 참고로, AAA인 사람을 조회하려고 했는데, 여러 사람이 나온다면, NoUniqueResultException 에러가 터진다.
근데 이 에러는 db마다 다르기 때문에 spring이 spring framework exception으로 변환해서 모든 db에서 사용 가능 하게 해준다.
`

0개의 댓글