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. 참고
📚 Related Posts
- JPA - 값 타입(6)
 - JPA - 프록시와 연관관계(5)
 - JPA - 다양한 연관관계 매핑(4)
 - JPA - 연관관계 매핑(기초)(3)
 - JPA - 엔티티 매핑(2)
 - JPA - 영속성 관리(1)
 - [JPA] 연관관계 매핑 (연관관계 편의 메서드)
 - [JPA] 엔티티 설계시 주의사항들
 - [JPA] Auditing 사용하기
 - [JPA]@Transactional를 통한 Optimization
 - [JPA] 엔티티 일부 데이터만 조회하는 Projection
 - [JPA] save메서드로 살펴보는 persist와 merge 개념
 - [JPA] 쿼리메서드(Lookup 전략)
 - [JPA] QueryDSL 설정방법
 - [JPA] null 처리
 - [JPA] 연관관계 매핑 기초(다대일, 연관관계 주인)
 - SpringBoot, JPA, H2를 이용한 간단한API 작성
 - [JPA] proxy, fetch 전략
 - [JPA] 도메인 클래스 컨버터란?
 - [JPA] Custom Repository 만들기
 - [JPA] Casecade 옵션