Enterprise Avançado

Substitua o mapeamento manual de JDBC ResultSet pela Criteria API type-safe do JPA para consultas dinâmicas.

✕ 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();
}
Viu um problema com este código? Nos avise.
🔒

Consultas type-safe

O builder Criteria detecta incompatibilidades de nome e tipo de campo em tempo de compilação.

🗺️

Mapeamento automático

O JPA mapeia as linhas do resultado para objetos de entidade — sem extração manual coluna por coluna.

🧩

Predicados composíveis

Cláusulas where dinâmicas se compõem de forma limpa com and(), or() e objetos Predicate reutilizáveis.

Abordagem Antiga
JDBC ResultSet
Abordagem Moderna
JPA Criteria API
Desde o JDK
11
Dificuldade
Avançado
Mapeamento JDBC ResultSet vs JPA Criteria API
Disponível

Amplamente disponível desde o Jakarta EE 8 / Java 11

JDBC puro exige construir strings SQL, definir parâmetros por índice e mapear cada coluna do ResultSet manualmente — um processo propenso a erros que quebra silenciosamente quando colunas mudam. A Criteria API do JPA constrói consultas programaticamente usando um padrão builder type-safe. Nomes de colunas são validados contra o modelo de entidades, o mapeamento de resultados é automático e consultas dinâmicas complexas se compõem de forma limpa, sem concatenação de strings.

Compartilhar 𝕏 🦋 in