JPA vs Jakarta Data
Dichiara un'interfaccia repository e lascia che Jakarta Data generi automaticamente l'implementazione 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);
}
Zero boilerplate
Dichiara l'interfaccia; il container genera l'intera implementazione DAO al deploy.
Query derivate
I nomi dei metodi come findByNameAndStatus vengono analizzati automaticamente — nessun JPQL o SQL necessario.
Portabile
Qualsiasi runtime conforme a Jakarta EE 11 fornisce l'implementazione del repository senza vendor lock-in.
Disponibile da Jakarta EE 11 / Java 21 (2024)
Jakarta Data (Jakarta EE 11) trasforma l'accesso ai dati in una pura dichiarazione di interfaccia. Annoti un'interfaccia con @Repository ed estendi un tipo di repository integrato come CrudRepository. Il runtime genera l'implementazione — incluse le query derivate dai nomi dei metodi come findByName — quindi non c'è boilerplate EntityManager, nessuna stringa JPQL e nessun metodo save/find scritto a mano.