Enterprise Средний

Объявите интерфейс репозитория и позвольте Jakarta Data автоматически сгенерировать реализацию DAO.

✕ 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);
}
Заметили проблему в этом коде? Сообщите нам.
🪄

Ноль шаблонного кода

Объявите интерфейс; контейнер генерирует полную реализацию DAO во время развёртывания.

🔍

Производные запросы

Имена методов вроде findByNameAndStatus разбираются автоматически — никакого JPQL или SQL не требуется.

🔌

Переносимость

Любая Jakarta EE 11-совместимая среда выполнения предоставит реализацию репозитория без привязки к поставщику.

Старый подход
JPA EntityManager
Современный подход
Jakarta Data Repository
Начиная с JDK
21
Сложность
Средний
JPA против Jakarta Data
Доступно

Доступно начиная с Jakarta EE 11 / Java 21 (2024)

Jakarta Data (Jakarta EE 11) превращает доступ к данным в чистое объявление интерфейса. Вы аннотируете интерфейс с @Repository и расширяете встроенный тип репозитория, например CrudRepository. Среда выполнения генерирует реализацию — включая производные запросы по именам методов, таким как findByName — так что не нужно ни шаблонного кода EntityManager, ни JPQL-строк, ни написанных вручную методов save/find.