Back-end/Spring Boot, JPA
Spring Data Repository 확장 (짧음)
philo0407
2023. 12. 13. 02:35

종종 Spring Data 스택을 사용하다 보면
어떤 Entity Repoistory 던간에 자주 사용하는 기능이 나오기 마련이다
나의 경우 토이를 할때 Kotlin을 자주 사용하는데
ID에 의한 찾은 값의 반환타입이 Optional 보다는 nullable Entity 인게 편한 경우가 많았다
왜냐하면 Elvis Operator를 사용하는게 보다 간단하다고 생각했기 때문이다
val notNullObject = nullableObject ?: throw RuntimeException("null이 될 수 없습니다.")
이때 사용하면 좋은 심플한 트릭이다
Spring Data Repository 확장하기
확장할 Repository에서 구현하고자 하는 메서드만 기술한다
interface ExtendedCrudRepository<T, ID>: CrudRepository<T, ID> {
fun findByIdOrNull(id: ID): T? {
val optionalEntity: Optional<T> = findById(id)
return optionalEntity.orElse(null)
}
}
그리고 구현한 Repository를 사용한다
interface LockRepository : ExtendedCrudRepository<Lock, String> {
}
Client Code
그러면 아래와 같이 사용할 수 있다
val lock = repository.findByIdOrNull(lockId) ?: throw LockException("Lock이 존재하지 않습니다.")