Enterprise Avanzado

Reemplaza el mapeo manual de JDBC ResultSet por la API Criteria de JPA con seguridad de tipos 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();
}
¿Ves un problema con este código? Cuéntanos.
🔒

Consultas con seguridad de tipos

El builder Criteria detecta errores de nombres de campo y tipos incompatibles en tiempo de compilación.

🗺️

Mapeo automático

JPA mapea las filas del resultado a objetos entidad — sin extracción manual columna por columna.

🧩

Predicados componibles

Las cláusulas where dinámicas se construyen limpiamente con and(), or() y objetos Predicate reutilizables.

Enfoque Antiguo
JDBC ResultSet
Enfoque Moderno
API Criteria de JPA
Desde JDK
11
Dificultad
Avanzado
Mapeo de JDBC ResultSet vs API Criteria de JPA
Disponible

Ampliamente disponible desde Jakarta EE 8 / Java 11

JDBC crudo requiere construir cadenas SQL, establecer parámetros por índice y mapear cada columna del ResultSet manualmente — un proceso propenso a errores que falla silenciosamente cuando las columnas cambian. La API Criteria de JPA construye consultas programáticamente usando un patrón builder con seguridad de tipos. Los nombres de columnas se validan contra el modelo de entidad, el mapeo de resultados es automático y las consultas dinámicas complejas se componen limpiamente sin concatenación de cadenas.

Compartir 𝕏 🦋 in