MyObject myObject = repositoryHibernateImpl.getMyObjectFromDatabase();
//transaction is finished, and no, there is not an option to reopen it
ThirdPartyUtility.doStuffWithMyObjectType(myObject);
à ce stade, vous avez déjà défini ce qui est paresseux et désireux chargé, et l'utilitaire tiers essayerez d'appeler toutes les méthodes de votre « myObject » par exemple, c'est bien parce que vous ne voulez pas retourner quoi que ce soit pour les propriétés paresseusement chargées, malheureusement, il ne renvoie pas de valeur nulle, il lance un LazyInitializationException
.Mise en veille prolongée - Éviter LazyInitializationException - Détachez objet à partir de Proxy et session
Cela se produit parce que vous appelez en fait la méthode sur le proxy de mise en veille prolongée de votre objet, et il sait qu'il n'a pas tiré par les cheveux que les données, et génère une exception.
Est-il même possible d'obtenir l'objet sous-jacent avec des valeurs nulles de sorte qu'un getter retourne juste nulle, et ne jette pas une exception? Fondamentalement, détacher l'objet de sorte qu'Hibernate n'en soit plus du tout conscient. L'accesseur à l'objet qui est paresseusement chargé doit retourner null, il ne peut pas retourner les valeurs réelles, nous voulons être en mesure de convertir l'entité en POJO sans avoir à créer un objet qui ressemble à l'entité et doit remapper tous les valeurs.
c'est une solution très intéressante, il y a évidemment un inconvénient que l'entité devient étroitement couplée à hiberner, mais à moins qu'il y ait une réponse qui le fait sans le couplage je pense que c'est le gagnant – walnutmon