Skip to main content

Command Palette

Search for a command to run...

Jakarta Data en Quarkus: Repositorios Simplificados

Updated
3 min read

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

  1. Repositorios Anidados: Mantiene operaciones cerca de la entidad

  2. Active Record: Permite operaciones directas en instancias

  3. Flexibilidad: Puedes usar Active Record o Repository según necesites

  4. Type-safe Queries: Con @HQL (cuando esté disponible)

Comparación: Jakarta Data vs Panache Next

CaracterísticaJakarta Data PuroPanache Next
EntidadesJPA estándarPanacheEntity
RepositoriosInterfaces separadasAnidados en entidades
Active RecordNo
Queries type-safe@Find con métodos derivados@HQL (experimental)
Queries tradicionalesNoSí (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

  1. Generación Automática: Implementaciones generadas en tiempo de compilación

  2. Type-Safe: Validación en tiempo de compilación

  3. Menos Código: No necesitas escribir implementaciones

  4. 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.

Recursos

More from this blog

JoeDayz

53 posts

Community Guy | Java Champion | AWS Architect | Software Architect