-
Notifications
You must be signed in to change notification settings - Fork 4
Crud List repository service
Quarkus-Hilla provides specialized implementations of CrudRepositoryService and ListRepositoryService
designed for seamless integration with both quarkus-spring-data-jpa and quarkus-hibernate-orm-panache extensions.
This integration simplifies the usage of Hilla Auto Crud,
Auto Grid, and Auto Form
components in your Quarkus project.
The custom implementation for quarkus-spring-data-jpa involves wrapping Spring Data JPA’s CrudRepository.
These custom services seamlessly integrate with Hilla’s CrudService, ListService<T>, GetService, and CountService.
Additionally, they implement the FilterableRepository from quarkus-hilla, with methods dynamically implemented at build time through byte-code manipulation.
Given a User JPA entity with an identifier of type Long, define a Spring Data JPA repository:
import org.springframework.data.repository.CrudRepository;
import com.github.mcollovati.quarkus.hilla.crud.spring.FilterableRepository;
public interface UserRepository extends CrudRepository<User, Long>, FilterableRepository<User, Long> {}Then create a service class extending CrudRepositoryService:
import com.vaadin.flow.server.auth.AnonymousAllowed;
import dev.hilla.BrowserCallable;
import com.github.mcollovati.quarkus.hilla.crud.spring.CrudRepositoryService;
@BrowserCallable
@AnonymousAllowed
public class UserService extends CrudRepositoryService<User, Long, UserRepository> {}In the context of quarkus-hibernate-orm-panache, the custom implementation of CrudRepositoryService and ListRepositoryService follows a similar approach.
These services implement Hilla interfaces while wrapping a FilterableRepository, an extension of PanacheRepositoryBase.
The methods of the FilterableRepository are dynamically implemented at build time through byte-code manipulation by the quarkus-hilla extension.
Given a User JPA entity with an identifier of type Long, create a repository class implementing FilterableRepository:
import jakarta.enterprise.context.ApplicationScoped;
import com.github.mcollovati.quarkus.hilla.crud.panache.FilterableRepository;
@ApplicationScoped
public class UserRepository implements FilterableRepository<User, Long> {}Then extend CrudRepositoryService in your service class:
import com.vaadin.flow.server.auth.AnonymousAllowed;
import dev.hilla.BrowserCallable;
import com.github.mcollovati.quarkus.hilla.crud.panache.CrudRepositoryService;
@BrowserCallable
@AnonymousAllowed
public class UserService extends CrudRepositoryService<User, Long, UserRepository> {}By adhering to this structure, you seamlessly integrate quarkus-hibernate-orm-panache with Hilla,
benefiting from the custom implementations of CrudRepositoryService and ListRepositoryService provided by quarkus-hilla.