Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →