org.hibernate.LazyInitializationException: impossible d’initialiser le proxy – pas de session

J’ai deux serveurs physiques sur lesquels mon application Web est gérée par des équilibreurs de charge. Je reçois toujours –

org.hibernate.LazyInitializationException: impossible d’initialiser le proxy – pas de session

lorsque l’un des serveurs est touché alors que l’autre fonctionne sans problème. J’ai un magasin de cache géré local activé et géré par l’application. Cette exception ne survient que lorsque vous essayez d’accéder à une colonne particulière d’une table. Le rest des opérations fonctionne parfaitement, quel que soit le serveur touché.

Rendre paresseux = faux deviendra un problème de performances car le nombre de lignes de cette table est assez important. Et au fait, nous utilisons get (object) sur session au lieu de charger (object).

Je déduis des tags que vous avez fournis que vous avez rencontré ce problème avec Spring Framework. J’ai rencontré la même LazyInitializationException lors de l’utilisation d’un org.springframework.data.jpa.repository.JpaRepository Spring org.springframework.data.jpa.repository.JpaRepository .

J’ai résolu le problème en annotant la méthode qui utilise indirectement Hibernate pour extraire des données de la firebase database avec @Transactional .

On dirait que la colonne à laquelle vous essayez d’accéder est configurée comme une association quelconque dans votre entité (OneToMany, ManyToOne, peu importe) et que vous ne remplissez pas cette association dans votre DAO. Ensuite, lorsque vous essayez d’accéder à cette colonne (à un emplacement de votre code où il n’y a pas de session Hibernate), elle n’est pas remplie, Hibernate essaie de la charger et explose.

Puisque vous utilisez en fait les données de cette association, le faire EAGER ressemble à quelque chose que vous voudriez réellement faire. Et si cette table est si grande, vous devriez l’indexer afin que les requêtes sur cette table soient efficaces.

Votre object est détaché. Vous devez l’attacher de nouveau à la session en cours avant d’y accéder:

 session.update(object); 

Assurez-vous également d’y accéder dans le cadre d’une transaction.

En savoir plus sur le problème / la solution ici

S’agit-il d’une association ou d’une propriété – s’il s’agit d’une propriété, le problème peut être que l’un des serveurs exécute une version non instrumentée.

 Lazy atsortingbute fetching: an atsortingbute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary.