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経由ですぐに利用できます。フィードバック歓迎です!
まだコメントはありません。