Jakarta Data en Quarkus: Repositorios Simplificados
Introducción
Jakarta Data es una nueva especificación que simplifica el acceso a datos mediante repositorios declarativos. Quarkus soporta completamente Jakarta Data y además incluye ejemplos de Panache Next, la nueva versión experimental de Panache.
¿Qué es Jakarta Data?
Jakarta Data permite crear repositorios simplemente definiendo interfaces con métodos. Las implementaciones se generan automáticamente en tiempo de compilación usando el procesador de anotaciones de Hibernate.
Repositorios Jakarta Data
Repositorio Básico
@Repository(dataStore = "DCHeroes")
public interface HeroRepository {
@Find
Optional<Hero> findById(Long id);
@Find
List<Hero> findByName(@Pattern String name);
@Find
List<Hero> findAll();
@Insert
void save(Hero hero);
@Delete
void deleteById(Long id);
}
Anotaciones Jakarta Data
@Find: Buscar entidades@Insert: Insertar entidades@Delete: Eliminar entidades@Pattern: Búsqueda parcial (LIKE)@Repository: Marca la interfaz como repositorio
Panache Next (Experimental)
Panache Next es una nueva versión experimental que combina Panache con Jakarta Data:
Entidad con Repositorio Anidado
@Entity
public class HeroPanacheEntity extends PanacheEntity {
public String name;
public Integer powerLevel;
public interface Repo extends PanacheRepository<HeroPanacheEntity> {
default List<HeroPanacheEntity> findActive() {
return find("isActive = true order by name").list();
}
default List<HeroPanacheEntity> findPowerful(int minLevel) {
return find("powerLevel >= ?1 order by powerLevel desc", minLevel).list();
}
}
}
Active Record Pattern
@Transactional
public void createHero() {
HeroPanacheEntity hero = new HeroPanacheEntity();
hero.name = "Superman";
hero.powerLevel = 95;
// Persistir directamente
hero.persist();
// Modificar (se persiste automáticamente en managed entities)
hero.name = "Superman Updated";
// Eliminar directamente
hero.delete();
}
Usar el Repositorio Anidado
@Inject
HeroPanacheEntity.Repo heroRepo;
public void useRepository() {
List<HeroPanacheEntity> powerful = heroRepo.findPowerful(80);
List<HeroPanacheEntity> active = heroRepo.findActive();
}
Características de Panache Next
Repositorios Anidados: Mantiene operaciones cerca de la entidad
Active Record: Permite operaciones directas en instancias
Flexibilidad: Puedes usar Active Record o Repository según necesites
Type-safe Queries: Con @HQL (cuando esté disponible)
Comparación: Jakarta Data vs Panache Next
| Característica | Jakarta Data Puro | Panache Next |
| Entidades | JPA estándar | PanacheEntity |
| Repositorios | Interfaces separadas | Anidados en entidades |
| Active Record | No | Sí |
| Queries type-safe | @Find con métodos derivados | @HQL (experimental) |
| Queries tradicionales | No | Sí (métodos de Panache) |
Ejemplo Completo
Nuestro demo muestra:
Repositorios Jakarta Data con @Find, @Insert, @Delete
Panache Next con entidades y repositorios anidados
Active Record Pattern
Queries con métodos de Panache
Estructura preparada para @HQL cuando esté disponible
Ventajas en Quarkus
Generación Automática: Implementaciones generadas en tiempo de compilación
Type-Safe: Validación en tiempo de compilación
Menos Código: No necesitas escribir implementaciones
Flexibilidad: Panache Next combina lo mejor de ambos mundos
Nota sobre Panache Next
Panache Next es experimental y puede cambiar:
Los nombres pueden cambiar
La API puede cambiar
@HQL aún no está disponible en Jakarta Data 1.0.1
Los ejemplos muestran la estructura que tendría con @HQL cuando esté disponible.
Conclusión
Jakarta Data simplifica enormemente el acceso a datos, y Panache Next promete combinar lo mejor de Panache y Jakarta Data. La generación automática de implementaciones hace que el código sea más limpio y mantenible.




