2010-08-20 5 views
1

Supposons que j'ai un:Lot charger une propriété Hibernate chargé paresseusement

class Student { 
    int id; 
    String name; 
    List<Course> courses; //Lazily loaded as per Hiberante config 
} 

Supposons maintenant que j'ai une liste des étudiants et afin d'optimiser la récupération Liste pour tous ces étudiants, je devais lots les sélectionner plutôt que de laisser Hibernate appelle un SQL séparé un par un. Je ne peux pas désactiver le chargement paresseux car dans de nombreux autres chemins de code, je ne vais pas accéder à la propriété du cours.

Je peux certainement écrire une fonction qui va prendre dans une liste de courseIds et retourner une liste, puis attacher ces objets à la session Hibernate mais ces objets ne seront pas associés aux objets Student chargés par Hibernate. Si j'appelle quelque chose comme student.setCourses(), alors je court le risque qu'Hibernate considère la session comme sale et essaie de mettre à jour les objets Student.

Je voudrais vraiment avoir des nouvelles de personnes qui ont rencontré des problèmes similaires lors de l'utilisation d'Hibernate.

Répondre

1

Écrivez une requête d'hibernation spécifique pour obtenir la classe d'étudiant avec un 'joint fetch' pour obtenir tous les cours liés dans une seule requête. Exemple:

from Student s left join fetch s.courses 
Questions connexes