Enterprise Продвинутый

Замените ручное маппирование JDBC ResultSet на типобезопасный Criteria API JPA для динамических запросов.

✕ Java EE
String sql = "SELECT * FROM users"
    + " WHERE status = ? AND age > ?";
try (Connection con = ds.getConnection();
     PreparedStatement ps =
             con.prepareStatement(sql)) {
    ps.setString(1, status);
    ps.setInt(2, minAge);
    ResultSet rs = ps.executeQuery();
    List<User> users = new ArrayList<>();
    while (rs.next()) {
        User u = new User();
        u.setId(rs.getLong("id"));
        u.setName(rs.getString("name"));
        u.setAge(rs.getInt("age"));
        users.add(u);
    }
}
✓ Jakarta EE 8+
@PersistenceContext
EntityManager em;

public List<User> findActiveAboveAge(
        String status, int minAge) {
    var cb = em.getCriteriaBuilder();
    var cq =
        cb.createQuery(User.class);
    var root = cq.from(User.class);
    cq.select(root).where(
        cb.equal(root.get("status"), status),
        cb.greaterThan(root.get("age"), minAge));
    return em.createQuery(cq).getResultList();
}
Заметили проблему в этом коде? Сообщите нам.
🔒

Типобезопасные запросы

Criteria Builder выявляет неверные имена полей и ошибки типов на этапе компиляции.

🗺️

Автоматический маппинг

JPA отображает строки результата на объекты-сущности — никакого ручного извлечения столбец за столбцом.

🧩

Компонуемые предикаты

Динамические WHERE-клаузулы легко строить с помощью and(), or() и повторно используемых объектов Predicate.

Старый подход
JDBC ResultSet
Современный подход
JPA Criteria API
Начиная с JDK
11
Сложность
Продвинутый
Маппинг JDBC ResultSet vs. JPA Criteria API
Доступно

Широко доступно начиная с Jakarta EE 8 / Java 11

Сырой JDBC требует построения SQL-строк, установки параметров по индексу и ручного маппинга каждого столбца ResultSet — процесс, подверженный ошибкам и незаметно ломающийся при изменении схемы. JPA Criteria API формирует запросы программно с помощью типобезопасного паттерна Builder. Имена столбцов проверяются по модели сущностей, маппинг результатов выполняется автоматически, а сложные динамические запросы легко компонуются без конкатенации строк.