JPA versus Jakarta Data
Déclarez une interface de référentiel et laissez Jakarta Data générer automatiquement l'implémentation du DAO.
@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);
}
Zéro code répétitif
Déclarez l'interface ; le conteneur génère l'implémentation complète du DAO au déploiement.
Requêtes dérivées
Les noms de méthodes comme findByNameAndStatus sont analysés automatiquement — sans JPQL ni SQL.
Portable
N'importe quel runtime compatible Jakarta EE 11 fournit l'implémentation du référentiel sans dépendance au fournisseur.
Disponible depuis Jakarta EE 11 / Java 21 (2024)
Jakarta Data (Jakarta EE 11) transforme l'accès aux données en une pure déclaration d'interface. Annotez une interface avec @Repository et étendez un type de référentiel intégré comme CrudRepository. Le runtime génère l'implémentation — y compris les requêtes dérivées de noms de méthodes comme findByName — donc pas de code répétitif EntityManager, pas de chaînes JPQL, pas de méthodes save/find écrites à la main.