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이 존재하지 않습니다.")