JPA versus Jakarta Data
Declara una interfaz de repositorio y deja que Jakarta Data genere la implementación del DAO automáticamente.
@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);
}
@Repository
public interface Users extends CrudRepository<User, Long> {
List<User> findByName(String name);
}
Cero código repetitivo
Declara la interfaz; el contenedor genera la implementación completa del DAO en tiempo de despliegue.
Consultas derivadas
Los nombres de métodos como findByNameAndStatus se analizan automáticamente — sin necesidad de JPQL ni SQL.
Portable
Cualquier runtime compatible con Jakarta EE 11 proporciona la implementación del repositorio sin dependencia de proveedor.
Disponible desde Jakarta EE 11 / Java 21 (2024)
Jakarta Data (Jakarta EE 11) convierte el acceso a datos en una pura declaración de interfaz. Anotas una interfaz con @Repository y extiendes un tipo de repositorio incorporado como CrudRepository. El runtime genera la implementación — incluyendo consultas derivadas de nombres de métodos como findByName — por lo que no hay código repetitivo de EntityManager, ni cadenas JPQL, ni métodos save/find escritos a mano.