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!

10
demandé sur Jonah 2011-03-30 01:25:34

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.

6
répondu Sean Adkinson 2011-03-29 21:30:32

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.

0
répondu JB Nizet 2011-03-29 21:34:12

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

0
répondu Kuntal-G 2014-07-17 18:14:27