Hibernate Reactive Coroutines – Hibernate Reactive wie Spring Data JPA
(github.com/clroot)Hallo. Ich habe eine Bibliothek erstellt, die in einer Hibernate-Reactive- + Kotlin-Coroutines-Umgebung den Komfort von Spring Data JPA bietet, und möchte sie hier teilen.
Warum ich sie erstellt habe
Bei der Nutzung von Hibernate Reactive war es umständlich, dass Funktionen wie findByEmail() oder @Query aus Spring Data JPA fehlten. Da ich die Mutiny-API direkt verwenden musste, entstand viel Boilerplate, und für jede Query-Methode musste ich HQL selbst schreiben.
Es gibt zwar Spring Data R2DBC, aber dafür hätte ich auf Funktionen wie Hibernate-Entity-Mapping oder Lazy Loading verzichten müssen, und Panache ist nur für Quarkus gedacht und kann daher in Spring Boot nicht verwendet werden.
Hauptfunktionen
- Automatische Implementierung von Repository-Interfaces: Durch bloßes Erben von
CoroutineCrudRepositorywerden CRUD-Methoden automatisch erzeugt - Query-Methoden: Auf Methodennamen basierende Queries wie
findByEmail(),existsByName(),countByStatus()usw. - Pagination: Unterstützung für
Page<T>,Slice<T>,Pageable @Query-Annotation: Direktes Schreiben von JPQL, Binding von Named-/Positional-Parametern
Anwendungsbeispiel
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
}
Tech-Stack
Kotlin 2.1, Hibernate Reactive 3.1, Mutiny, Vert.x, Spring Boot 3.4
Links
Kann direkt über JitPack verwendet werden. Feedback ist willkommen!
Noch keine Kommentare.