Question

Hé, je développe une application de bureau utilisant Spring et Hibernate et j’ai un problème avec l’initiation paresseuse. J'ai regardé sur le Web et chaque solution est liée à la session ouverte dans le modèle de vue, mais je ne peux pas utiliser ce modèle. J'ai également essayé d'obtenir la sessionfactory du HibernateTemplate , mais cela me renvoie une session déconnectée.

Quelqu'un connaît-il une autre solution?

Était-ce utile?

La solution

Je suggérerais que vous ayez essentiellement deux solutions:

  1. Prenez les dispositions nécessaires pour conserver une session Hibernate ouverte lorsque vous accédez à un objet ou à une collection initialisé paresseux. Cela signifie que vous devrez marquer soigneusement les limites de votre transaction dans votre code, à la "session ouverte en vue". modèle. Spring rend cela possible, mais dans une application de bureau, ce ne sera pas aussi simple qu'une application Web où les limites des transactions sont un peu plus évidentes.

  2. Désactivez toutes les initialisations différées pour vos objets persistants dans Hibernate.

L'option 2 pourrait entraîner de nombreux accès inutiles à la base de données, et l'option 1 signifie que vous devez étudier sérieusement votre flux de travail et vos cas d'utilisation.

J'espère que ça aide!

Autres conseils

Une option consiste à appeler Hibernate.initialize () sur les entités ou les collections pour forcer leur initialisation. Vous souhaitez le faire avant de renvoyer les données à votre vue. J'examinerais cela attentivement, car cela va générer beaucoup d'instructions SQL dans la base de données.

Vous voudrez peut-être examiner l'utilisation de " fetch " Dans vos requêtes HQL ou votre configuration, le mode de récupération passe à "impatient". dans vos mappages (je pense que c'est FetchMode.EAGER dans JPA ou lazy = "faux" dans hbm.xml).

@Jose: Ne gérez pas la session dans votre propre ThreadLocal. Utilisez SessionFactory.getCurrentSession () et configurez Hibernate pour utiliser le " thread " SessionContext.

J’avais un problème très similaire et je n’étais pas en mesure de trouver une solution vraiment appropriée. Je suis parvenu à mon propre projet, combinant différentes approches trouvées sur le Web et les ai publiées sur mon blog.

Désolé, je n’ai pas tout écrit ici, mais c’est beaucoup de travail de le faire encore et encore dans tous les forums où j’ai trouvé des personnes ayant ce problème ou un problème similaire

Chargement paresseux à distance avec Hibernate et Spring

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top