API Criteria
L'API Criteria permet de générer des requêtes avec des objets Java™, plutôt que de générer des chaînes pour les requêtes Java Persistence Query Language (JPQL).
L'API Criteria permet de générer des requêtes dynamiquement en phase d'exécution et de créer des requêtes sécurisées qui peuvent être vérifiées par le compilateur. L'exactitude des requêtes JPQL ne peut pas être vérifiée par le compilateur et doit donc l'être en phase d'exécution, dans le cadre de tests.
Le modèle suivant est une requête JPQL qui renvoie une liste d'employés ayant moins de cinq années de service :
SELECT e FROM Employee e WHERE e.serviceyears < 5
Voici un exemple de la requête Criteria équivalente :QueryBuilder qb = emf.getQueryBuilder();
CriteriaQuery q = qb.create(Employee.class);
Root e = q.from(Employee.class);
q.where(qb.lt(e.get(Employee_.serviceyears), 5));
TypedQuery tq = em.createQuery(q);
List result = q.getResultList();
Remarque : Employee_ est le métamodèle de la classe Employee.
Deux fonctions importantes sont des améliorations de JPQL :
- L'API Criteria peut exprimer des requêtes que ne permet pas JPQL. Pour plus de détails, voir la section, "Editable data store expressions", dans l'article developerWorks, Dynamic, typesafe queries in JPA 2.0.
- Une requête CriteriaQuery peut être éditée à l'aide d'un programme. Pour plus d'informations, voir la section "Editable query", dans l'article developerWorks, Dynamic, typesafe queries in JPA 2.0.