Hibernate Reactive Coroutines - Hibernate Reactive como o Spring Data JPA
(github.com/clroot)Olá. Compartilho uma biblioteca que criei para oferecer a conveniência do Spring Data JPA em um ambiente Hibernate Reactive + Kotlin Coroutines.
Motivo da criação
Ao usar Hibernate Reactive, senti falta de recursos como findByEmail() e @Query do Spring Data JPA, o que era inconveniente. Como eu precisava lidar diretamente com a API Mutiny, a quantidade de boilerplate aumentava e eu tinha que escrever HQL manualmente para cada método de consulta.
Existe o Spring Data R2DBC, mas isso significava abrir mão de recursos como o mapeamento de entidades do Hibernate e Lazy Loading, e o Panache é exclusivo do Quarkus, então não podia ser usado no Spring Boot.
Principais recursos
- Implementação automática da interface Repository: geração automática de métodos CRUD apenas herdando
CoroutineCrudRepository - Métodos de consulta: consultas baseadas no nome do método, como
findByEmail(),existsByName()ecountByStatus() - Paginação: suporte a
Page<T>,Slice<T>ePageable - Anotação
@Query: escrita direta de JPQL, binding de parâmetros named/positional
Exemplo de uso
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
}
Stack técnico
Kotlin 2.1, Hibernate Reactive 3.1, Mutiny, Vert.x, Spring Boot 3.4
Link
Pode ser usado imediatamente via JitPack. Feedbacks são bem-vindos!
Ainda não há comentários.