JPA против Jakarta Data
Объявите интерфейс репозитория и позвольте Jakarta Data автоматически сгенерировать реализацию 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);
}
Ноль шаблонного кода
Объявите интерфейс; контейнер генерирует полную реализацию DAO во время развёртывания.
Производные запросы
Имена методов вроде findByNameAndStatus разбираются автоматически — никакого JPQL или SQL не требуется.
Переносимость
Любая Jakarta EE 11-совместимая среда выполнения предоставит реализацию репозитория без привязки к поставщику.
Доступно начиная с Jakarta EE 11 / Java 21 (2024)
Jakarta Data (Jakarta EE 11) превращает доступ к данным в чистое объявление интерфейса. Вы аннотируете интерфейс с @Repository и расширяете встроенный тип репозитория, например CrudRepository. Среда выполнения генерирует реализацию — включая производные запросы по именам методов, таким как findByName — так что не нужно ни шаблонного кода EntityManager, ни JPQL-строк, ни написанных вручную методов save/find.