Une façon d'éviter le problème des N + 1 select est d'utiliser un select avec un "join fetch" à la place d'un simple select dans la méthode qui récupère les CompteBancaire
.
Relisez le cours pour voir comment lancer un select avec join fetch.
Modifiez votre code, faites et "Clean and Build" et relancez l'application. Vous ne devriez plus avoir qu'un seul select. Vérifiez-le.
Ce select est maintenant un select avec jointure qui récupère en une seule fois les ComptBancaire
et les OperationBancaire
:
SELECT t1.ID, t1.NOM, t1.SOLDE, t1.VERSION, t0.ID, t0.DATEOPERATION, t0.DESCRIPTION, t0.MONTANT FROM OPERATIONBANCAIRE t0, COMPTEBANCAIRE_OPERATIONBANCAIRE t2, COMPTEBANCAIRE t1 WHERE ((t2.CompteBancaire_ID = t1.ID) AND (t0.ID = t2.operations_ID))
Rappelez-vous que l'association 1-N entre CompteBancaire
et OperationBancaire
est traduite par une table association COMPTEBANCAIRE_OPERATIONBANCAIRE
car l'association est unidirectionnelle et 1 vers N (cas pas étudié en cours) ; sinon cette association aurait été traduite plus simplement par une clé étrangère dans la table OPERATIONBANCAIRE
(cas étudié en cours).
Si la banque a 100 000 comptes, la différence de temps d'exécution entre 1 et 100 001 selects peut être très importante.
Comme il est dit en cours, si une de vos applications qui utilise une base de données relationnelle a des problèmes de performance, pensez à vérifier qu'elle n'a pas ce problème des N + 1 selects.