Comment résoudre l'exception « Échec de l'initialisation paresseuse de la collection » d'Hibernate lors d'une itération sur les relations
Le problème survient lors de la tentative d'accès à une collection à partir de une entité qui n’a pas été entièrement initialisée dans la session en cours. Dans ce cas, la collection "comments" de l'entité "Topic" n'est pas récupérée lors de la requête initiale, conduisant à une exception Hibernate.
Pour remédier à cela, il faut comprendre que les collections sont chargées paresseusement par par défaut dans Hibernate. Cela signifie que leurs éléments ne sont pas récupérés avec impatience lorsque l'entité parent est récupérée, mais plutôt lorsqu'on y accède réellement.
Pour charger avec impatience la collection "comments", mettez à jour le mappage des champs dans le modèle "Sujet" pour :
@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL) private Collection<Comment> comments = new LinkedHashSet<>();
En définissant la stratégie de récupération sur FetchType.EAGER, Hibernate récupérera explicitement la collection "comments" lors de la requête initiale, garantissant que tous les éléments sont disponibles lors de l'accès à l'instance "topicById".
De plus, envisagez d'augmenter le délai d'expiration de la session pour permettre des opérations plus longues ou d'utiliser l'annotation @OpenSessionInView pour garantir que la session Hibernate reste ouverte pendant le rendu de la vue JSP.
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!