Maison > Java > javaDidacticiel > Pourquoi Hibernate lève-t-il une exception « Échec de l'initialisation paresseuse d'une collection » et comment puis-je y remédier ?

Pourquoi Hibernate lève-t-il une exception « Échec de l'initialisation paresseuse d'une collection » et comment puis-je y remédier ?

Barbara Streisand
Libérer: 2024-12-02 22:16:11
original
532 Les gens l'ont consulté

Why Does Hibernate Throw a

Comprendre l'exception « Échec de l'initialisation paresseuse d'une collection » dans Hibernate

Dans le contexte d'Hibernate, l'exception « Échec de l'initialisation paresseuse d'une collection » " Une exception se produit lorsqu'une tentative est effectuée pour accéder à une propriété de collection d'une entité détachée qui n'a pas été correctement récupérée lors de la requête d'origine. Cette erreur se produit généralement lors de l'accès à des collections en dehors de la portée de la session Hibernate, souvent lors du traitement de l'affichage.

Pour résoudre ce problème, la relation de modèle entre le sujet et le commentaire doit être examinée. La collection de commentaires dans le modèle Topic est marquée comme initialisée par défaut par défaut. Cela signifie que la collection n'est pas chargée en mémoire lorsque l'entité Topic est récupérée de la base de données. Au lieu de cela, il n'est chargé que lorsque l'on accède réellement à la collection.

Étant donné que la collection est initialisée paresseusement, elle n'est plus accessible une fois que l'entité Topic est détachée de la session Hibernate. Dans ce scénario spécifique, l'entité Topic est détachée lorsque le flux de contrôle passe du contrôleur (TopicController) à la vue JSP (/topic/details), conduisant à l'exception.

Pour corriger l'erreur, les commentaires la collection peut être récupérée avec impatience pendant la requête. Ceci peut être réalisé en changeant le type de récupération de LAZY à EAGER dans l'annotation @OneToMany :

@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL)
private Collection<Comment> comments = new LinkedHashSet<Comment>();
Copier après la connexion

En définissant le type de récupération sur EAGER, la collection sera immédiatement chargée en mémoire lorsque l'entité Topic est récupérée. à partir de la base de données, en garantissant qu'elle est accessible à tout moment, même en dehors de la session Hibernate.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal