Utilisation des graphes d'entités

Préalables

Nous utilisons depuis plusieurs séances les entités et leurs relations. Par commodité et pour éviter un chargement de données excessif, nous utilisons en général le chargement retardé des relations.

Ce mécanisme permet de limiter la quantité de données transmise mais il implique que la connexion vers la base soit toujours ouverte afin de récupérer, à la demande, les données manquantes. cela pose un problème dans une approche transactionnelle. Hormis cette difficulté, le chargement retardé implique le lancement de plusieurs requêtes de récupération des données annexes. Cela peut avoir un impact très fort sur l'efficacité de nos traitements.

Nous allons essayer de régler ces problèmes avec les graphes d'entités.

Ce TP est basé sur un tutoriel annexe, mais je vous demande de respecter les recommandations listées ci-dessous.

À faire :

Mise en oeuvre

Travail à faire : Suivez ce tutoriel mais avec la procédure suivante :

Après le tutoriel : G.E. et Spring Data

Vous pouvez demander à Spring Data d'utiliser les graphes d'entités en

Travail à faire : Vérifiez par un test unitaire la bonne prise en compte du graphe d'entités (les données sont-elles chargées ?).

Chargement retardé avec JPAQL

Pour compléter le problème du chargement retardé, il vous est possible de demander explicitement le chargement d'une donnée au travers d'une requête JPA (clause FETCH).

En vous aidant de la requête ci-dessous, ajoutez une méthode au dépôt de gestion des publications et testez le bon chargement des commentaires (mais pas du propriétaire de la publication).

select p from Post p join fetch p.comments where (id = :id)

Performance

Vérifiez par une mesure des temps d'exécution qu'il existe une différence importante entre un chargement retardé géré de manière manuelle (appel à la méthode size() par exemple) et la solution des graphes d'entités.

Vérifiez cette différence notamment si la BD est stockée sur disque.