Plusieurs points :
Ta requête
SELECT Nom FROM Universite WHERE IDUniversite IN (SELECT IDUniversite FROM Etudiant WHERE IDEtudiant = @Parametre)
n'est pas des plus efficace !! L'utilisation du "IN" n'est pas vraiment recommandé. Un jointure serait préférable.
Je ne suis pas sûr que ton problème soit "N+1 SELECT". En fait, tu as tout simplement N Etudiant et pour chacun tu veux son université. Ton problème est donc de charger le plus efficacement les universités sachant que probablement, dans la cinématique de ton application, l'utilisateur demande les universités au fur et à mesure.
Avec Hibernate, tu peux créer un objet "Composite", dans ton cas un objet de type EtudiantUniversité qui contient les attributs de Etudiant + le nom et l'ID (par exemple) de l'uiversité de rattachement. Ensuite, sans que cette classe ne soit référencé dans le fichier de mapping, tu peux faire des requêtes HQL comme ceci :
SELECT new EtudiantUniversité(e.att1,e.att2,...,u.id, u.nom) FROM Etudiant e, Universite u WHERE....
Bien sûr, il faut, au niveau du code client, savoir que l'on doit utiliser cet objet particulier.
Autre point, l'objet n'est pas souvent pratique pour les opération ensembliste; d'où les "entorses" nécessaires
Partager