-
Spring Data JPA 2. null 처리 관련 애노테이션Spring/Spring Data JPA 2020. 6. 1. 23:00
리포지토리를 튜닝해보기
리포지토리는 Repository, CrudRepository, PagingAndSortingRepository를 상속받을 것이다.
@RepositoryDefinition
- 이런 상속을 받고 싶지 않은 경우 애노테이션으로 처리가 가능하다.
- @RepositoryDefinition로 가능하며 CrudRepository를 상속받는 식으로 만든다면
- 메서드 들은 전부 공개가 되게 되지만 이런 어노테이션 방식은
- 노출하고 싶은 메서드만 노출이 가능한 것 같다.
@NoRepositoryBean
- 다음과 같이 CRUD repository를 대신하는 Repository만 쓰고
- Repository는 빈 영역이니 직접 CRUD repository를 만들고
- 선택적인 노출을 가능하게 할 수도 있다.
- 스프링 데이터 2.0부터는 repository CRUD 메서드가
- 자바 8의 Optional을 사용해서 리턴하게 된다.
- 따라서 그 값이 있는지 없는지를 알려주게 된다.
- 다음과 같이 Book에 title을 추가하고 findByTitleIsLike 메서드를 만들어 보자
- 이 같은 경우 null이 나와야 하지만 Optional을 지원하므로 empty List가 나오게 된다.
- 즉 null이 아닌 비어있는 empty 컬렉션들이 반환이 된다.
Nullability annotations
Null이 가능한지 여부를 리포지토리 메서드에 애노테이션으로 알려줄 수 있다.
@NonNull @Nullable
- 날이 될 수 없는 파라미터, 리턴 타입, 필드에 설정 가능하다.
@NonNullApi @NonNullFields
- 패키지 레벨에 설정
- 모든 메서드와 파라미터에 NonNull을 붙이면 지저분하니 Package 레벨로 설정을 하는 듯싶다.
- 다음과 같이 RuneTime시 Value must not be null으로 에러가 나는 것을 알 수 있다.
- 다음과 같이 com.acme 패키지는 NonNullApi가 설정되었다고 가정하자.
- 그러면 모든 파라미터와 리턴 타입에는 Null이 올 수 없고 온다면 runtime시 에러가 나게 된다.
- 하지만 더 가까운 쪽에 영향을 받기 때문에 findByEmailAddress에 있는 User과 EmailAddress는
- Null이 가능하게 된다.
'Spring > Spring Data JPA' 카테고리의 다른 글
Spring Data JPA 3. 쿼리 메서드 (0) 2020.06.02 JPA의 Dialect(방언) (0) 2020.05.25 영속성 컨텍스트(persistence context) (0) 2020.05.24 Spring Data JPA 1. 상속구조와 주요 인터페이스 (0) 2020.05.12 하이버네이트 ORM User guide 1 (0) 2020.05.11