Show GN: Hibernate Reactive Coroutines - Hibernate Reactive를 Spring Data JPA처럼
(github.com/clroot)안녕하세요. Hibernate Reactive + Kotlin Coroutines 환경에서 Spring Data JPA의 편의성을 제공하는 라이브러리를 만들어서 공유합니다.
만들게 된 계기
Hibernate Reactive를 사용하면서 Spring Data JPA의 findByEmail(), @Query 같은 기능들이 없어서 불편했습니다. Mutiny API를 직접 다루다 보니 보일러플레이트가 많아지고, 쿼리 메서드마다 HQL을 직접 작성해야 했습니다.
Spring Data R2DBC가 있지만, Hibernate의 엔티티 매핑이나 Lazy Loading 같은 기능을 포기해야 했고, Panache는 Quarkus 전용이라 Spring Boot에서는 사용할 수 없었습니다.
주요 기능
-
Repository 인터페이스 자동 구현:
CoroutineCrudRepository상속만으로 CRUD 메서드 자동 생성 -
쿼리 메서드:
findByEmail(),existsByName(),countByStatus()등 메서드 이름 기반 쿼리 -
Pagination:
Page<T>,Slice<T>,Pageable지원 - @Query 어노테이션: JPQL 직접 작성, Named/Positional 파라미터 바인딩
사용 예시
interface UserRepository : CoroutineCrudRepository<User, Long> {
suspend fun findByEmail(email: String): User?
suspend fun findAllByStatus(status: Status, pageable: Pageable): Page<User>
@Query("SELECT u FROM User u WHERE u.role = :role")
suspend fun findByRole(role: Role): List<User>
@Modifying
@Query("UPDATE User u SET u.status = :status WHERE u.id = :id")
suspend fun updateStatus(id: Long, status: Status): Int
}
기술 스택
Kotlin 2.1, Hibernate Reactive 3.1, Mutiny, Vert.x, Spring Boot 3.4
링크
JitPack을 통해 바로 사용할 수 있습니다. 피드백 환영합니다!