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 옵션