Désactiver le chargement paresseux en hibernation
comment désactiver le chargement paresseux en hibernation? J'utilise des annotations de persistance, pas un fichier xml hbm.
je vais chercher un seul objet par ID et je veux que toutes les propriétés soient chargées. La session est fermée avant que j'utilise l'objet.
Merci!
3 réponses
vous devez annoter les propriétés que vous voulez Non-lazy chargé avec FetchType.DÉSIREUX
@ManyToOne(fetch = FetchType.EAGER)
Vous voyez, ce n'est pas l'objet que vous chargez qui est chargé paresseusement. Plutôt, les associations de cet objet sont paresseuses, et vous devez leur dire de ne pas l'être si c'est votre comportement désiré.
si ces objets ont aussi des associations que vous voulez charger avec empressement, vous devez les annoter aussi.
Vous pouvez spécifier fetch = FetchType.EAGER
sur toutes vos associations, récursivement, mais cela chargerait tout un tas de données que vous n'êtes probablement pas intéressé par.
c'est habituellement une meilleure solution pour au moins laisser toutes les associations OneToMany et ManyToMany à LAZY (qui est la valeur par défaut), et les initialiser avant de fermer la session si votre User-case en a besoin (ou même les charger avec une requête ad-hoc).
les associations OneToOne et ManyToOne sont avides par défaut, et ceci génère déjà souvent trop de requêtes. Je préfère généralement marquer tout paresseux, à moins que tous les cas d'utilisation ont besoin de chercher l'association.
utiliser fetch = FetchType.Désireux de toute la collection et l'entité que vous voulez paresseux d'être off.
vérifiez aussi ceci: http://techblog.bozho.net/?p=645