Mapping de JDBC ResultSet vs API Criteria de JPA
Remplace le mapping manuel de JDBC ResultSet par l'API Criteria de JPA avec sécurité de types pour les requêtes dynamiques.
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);
}
}
@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();
}
Requêtes avec sécurité de types
Le builder Criteria détecte les erreurs de noms de champs et les types incompatibles à la compilation.
Mapping automatique
JPA mappe les lignes de résultat en objets entité — sans extraction manuelle colonne par colonne.
Prédicats composables
Les clauses where dynamiques se construisent proprement avec and(), or() et des objets Predicate réutilisables.
Disponible depuis Jakarta EE 8 / Java 11
JDBC brut nécessite de construire des chaînes SQL, de définir des paramètres par index et de mapper chaque colonne du ResultSet manuellement — un processus sujet aux erreurs qui échoue silencieusement quand les colonnes changent. L'API Criteria de JPA construit des requêtes programmatiquement en utilisant un pattern builder avec sécurité de types. Les noms de colonnes sont validés par rapport au modèle d'entité, le mapping des résultats est automatique et les requêtes dynamiques complexes se composent proprement sans concaténation de chaînes.