Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 6 · Application directe du cours
Compter les requêtes
Relations et transactions · niveau 2
Énoncé
Après les trois commandes de la section 6.5, combien de requêtes SQL provoque la conversion en CommandeVue de la liste des commandes, sans puis avec le graphe d'entités ? Justifier le premier nombre, puis écrire un test qui le vérifie automatiquement, à l'aide des statistiques d'Hibernate.
Corrigé
Sans graphe, 8 requêtes : 1 pour les trois commandes ; 3 pour leurs lignes (une par commande, au premier accès à getLignes()) ; 4 pour les livres, un par livre distinct (le contexte de persistance évite de relire un livre déjà chargé ; ici, chacun des quatre livres n'apparaît qu'une fois, mais deux lignes d'un même livre ne coûteraient qu'une requête). Avec le graphe, une seule.
Le test compte les requêtes préparées par Hibernate, en activant ses statistiques dans les propriétés du test :
long requetes(Runnable action) {
Statistics stats = emf.unwrap(SessionFactory.class).getStatistics();
stats.clear();
transaction.executeWithoutResult(t -> action.run());
return stats.getPrepareStatementCount();
}
void ex1_nPlusUn() {
troisCommandes();
long sansGraphe = requetes(
() -> commandes.findByOrderByNumeroAsc().forEach(CommandeVue::de));
long avecGraphe = requetes(
() -> commandes.findAllByOrderByNumeroAsc().forEach(CommandeVue::de));
System.out.println("requêtes sans graphe : " + sansGraphe
+ ", avec graphe : " + avecGraphe);
assertThat(sansGraphe).isEqualTo(8); // 1 + 3 (lignes) + 4 (livres distincts)
assertThat(avecGraphe).isEqualTo(1);
}
Il affiche : requêtes sans graphe : 8, avec graphe : 1.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.