J'ai créé une classe dans laquelle j'ai défini certains de ses champs (autres entités) pour être chargé par LAZY. Maintenant, j'ai besoin d'utiliser cet objet après qu'il a été détaché de la session, donc je dois évidemment m'assurer que tous les champs dont j'ai besoin sont remplis avant de le détacher. J'ai essayé juste d'appeler les getters à ces champs paresseux mais cela n'a pas semblé fonctionner. Quelqu'un a-t-il une idée pour forcer le chargement de ces champs?Hibernate chargement paresseux dans les objets détachés
Répondre
Hibernate.initialize(yourObject)
va forcer l'initialisation de l'objet/collection qui lui est passé. Vous avez besoin d'une session active pour cela.
Si l'entité est détachée, vous devez rattacher l'objet (en utilisant merge(..)
) à une session active, puis l'initialiser.
+1 Bozho ......... –
'merge' est juste pour des cas très spéciaux. En règle générale, je recommanderais 'update' – pakore
@pakore - eh bien, la différence que je pense est que' merge (..) 'peut également insérer un nouvel enregistrement. Mais je suis plus habitué à la sémantique JPA, donc c'est peut-être un peu différent ici. – Bozho
Vous pouvez le rattacher à la session. C'est la manière normale.
session.update(yourObject); //This reattachs the object to the current session.
yourObject.someGetter(); //This will work now.
Je sais que vous avez demandé Hibernate, mais EclipseLink a cette fonction de sorte qu'il pourrait être utile de vérifier si vous utilisez JPA et non lié à une implémentation donnée. Vous pourriez rencontrer d'autres problèmes à la migration EclipseLink si ..
<prop key="hibernate.enable_lazy_load_no_trans">true</prop>
vous pouvez ajouter cette ligne dans votre fichier de configuration, il peut chercher vos objets paresseux même est détaché, mais il devrait être utiliser la version post 4.1.7 comme il y a un problème de fuite de connexion avec la version précédente.voir here
êtes-vous sûr que votre session est ouverte lors de l'appel getters? –
Session si définitivement ouvert quand j'appelle les getters –