L'exception Hibernate « Échec de l'initialisation paresseuse d'une collection de rôles » peut survenir lors d'une tentative d'accès une collection chargée paresseusement en dehors d’un contexte de session. Pour résoudre ce problème, examinons le scénario spécifique :
Le code fourni définit une relation @OneToMany dans le modèle Topic, mappée par le modèle Comment. Dans votre contrôleur, vous récupérez une instance de Topic et ses commentaires. La vue JSP parcourt ensuite les commentaires pour les afficher. Cependant, cela déclenche l'exception car la collection de commentaires est chargée par défaut.
Pour rectifier cela, vous avez deux options :
1. Chargement hâtif :
Mettez à jour le mappage du champ de commentaires dans le sujet pour utiliser le chargement hâtif :
@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL) private Collection<Comment> comments = new LinkedHashSet<>();
Le chargement hâtif garantit que la collection de commentaires est initialisée lorsque le sujet est chargé, empêchant ainsi le exception.
2. Chargement paresseux avec session ouverte :
Vous pouvez également conserver la collection de commentaires en mode chargement paresseux, mais assurez-vous que la session Hibernate est ouverte lors de l'accès aux commentaires :
Dans votre contrôleur :
Topic topicById = service.findTopicByID(id); // Start a new Hibernate session Session session = sessionFactory.getCurrentSession(); Collection<Comment> commentList = topicById.getComments(); // Close the session once done session.close(); // Pass the commentList to the view //...
En ouvrant une nouvelle session au sein du contrôleur, Hibernate dispose du contexte nécessaire pour initialiser la collection de commentaires. N'oubliez pas de fermer explicitement la session une fois terminée.
N'oubliez pas que le chargement rapide peut avoir des implications en termes de performances sur des collections plus volumineuses. Choisissez donc l'approche qui correspond le mieux aux besoins de votre application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!