En plus de pouvoir associer un modèle de classes Java et une structure de table dans une base de données, la spécification JPA décrit un langage de requête, appelé JPQL (Java Persistence Query Language). Ce langage, reprend les fonctionnalités du SQL, et permet d'interroger une base de données en utilisant les entités JPA définies dans une unité de persistance.
Même si la syntaxe de JPQL ressemble fort à celle du SQL, ce n'est pas la même, et les notions manipulées sont légèrement différentes. Là où chaque base de données a sa propre version de SQL, il n'existe qu'un seul JPQL. Une requête JPQL est donc écrite indépendamment de la base de données à laquelle elle s'adresse, ce qui est un gain important de productivité.
Le langage JPQL définit trois types de requêtes :
-
les requêtes de sélections ;
-
les requêtes de mise à jour ;
-
les requêtes d'effacement.
Notons qu'une requête opère toujours sur les entités d'une unique unité de persistance. Il n'est pas possible de faire des requêtes portant sur des données gérées par plusieurs unités de persistance.