Enterprise Intermediário

Declare uma interface de repositório e deixe o Jakarta Data gerar a implementação do DAO automaticamente.

✕ Jakarta EE 8+
@PersistenceContext
EntityManager em;

public User findById(Long id) {
    return em.find(User.class, id);
}

public List<User> findByName(String name) {
    return em.createQuery(
        "SELECT u FROM User u WHERE u.name = :name",
        User.class)
        .setParameter("name", name)
        .getResultList();
}

public void save(User user) {
    em.persist(user);
}
✓ Jakarta EE 11+
@Repository
public interface Users extends CrudRepository<User, Long> {
    List<User> findByName(String name);
}
Viu um problema com este código? Nos avise.
🪄

Zero boilerplate

Declare a interface; o container gera a implementação completa do DAO no momento do deploy.

🔍

Consultas derivadas

Nomes de métodos como findByNameAndStatus são interpretados automaticamente — sem necessidade de JPQL ou SQL.

🔌

Portável

Qualquer runtime compatível com Jakarta EE 11 fornece a implementação do repositório sem lock-in de fornecedor.

Abordagem Antiga
JPA EntityManager
Abordagem Moderna
Jakarta Data Repository
Desde o JDK
21
Dificuldade
Intermediário
JPA versus Jakarta Data
Disponível

Disponível desde o Jakarta EE 11 / Java 21 (2024)

O Jakarta Data (Jakarta EE 11) transforma o acesso a dados em uma pura declaração de interface. Você anota uma interface com @Repository e estende um tipo de repositório embutido como CrudRepository. O runtime gera a implementação — incluindo consultas derivadas a partir de nomes de métodos como findByName — eliminando boilerplate do EntityManager, strings JPQL e métodos save/find escritos manualmente.

Compartilhar 𝕏 🦋 in