0%

[JPA] null 처리

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

Java8 Optional 처리

1
2
3
4
5
6
7
8
@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를 리턴한다.

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

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

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

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

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

참고

Welcome to my other publishing channels