Utilisation des graphes d'entités

Quelques liens :

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.

Mise en oeuvre

A savoir avant le tutoriel :

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

Après le tutoriel :

Graphe d'entités 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.