[JPA] null 처리

JPA에서 null처리 하는 방법에 대해서 알아 보자.

1. Java8 Optional 처리

    @Test
    public void nullTest() {
        Optional<Post> byId = postRepository.findById(1000l);
        System.out.println(byId);  // Optional.empty

        // assertj를 사용
        Assertions.assertThat(byId).isEmpty();
    }

JPA에서 단일 엔티티를 조회할 때, Optional객체를 리턴 받도록 설정되어 있다. 그렇기 때문에 데이터가 없는 값(여기에서는 id가 1000)을 조회하면 nullPointerException이 나지 않고, Optional.empty를 리턴한다.

2. Collectio에서 빈 콜렉션을 리턴함 (null 리턴하지 않음)

    @Test
    public void nullTest() {
        List<Post> all = postRepository.findAll();
        System.out.println(all); // []
        Assert.assertNotNull(all);
    }

역시나 아무런 데이터가 없는 Post리스트를 조회했을 때. null값을 리턴 하는 것이 아닌, 비어있는 Collection를 리턴한다. 그렇기 때문에 다음과 같은 코드는 불필요하다.

public void someMethod(){
    List<Post> all = postRepository.findAll();
    // 불필요한 코드...........
    if (all == null){
        throw new Exception("exception 처리")
    }
}

2.1. Spring 5.xx 대 부터는 @Nullable, @NonNull 지원

3. 참고