Un objet que j'ai mappé avec hibernate a un comportement étrange. Afin de savoir pourquoi l'objet se comporte étrangement, j'ai besoin de savoir ce qui rend cet objet sale. Quelqu'un peut-il vous aider et me donner un indice? p>
L'objet est une classe Java dans un contexte Java / Spring. Je préférerais donc une réponse ciblant la plate-forme Java. P>
EDIT: J'aimerais avoir accès à l'état Hibernate Sale et à la manière dont il change sur un objet attaché à une session. Je ne sais pas comment un morceau de code aiderait. p>
Quant au problème réel: dans une transaction gérée par un transacteur de printemps, je fais des requêtes (lire) sur des objets et sans faire une économie explicite sur ces objets, ils sont enregistrés par le transactionManager car Hibernate pense que certaines de ces (et pas tous) sont sales. Maintenant, j'ai besoin de savoir pourquoi Hibernate pense que ces objets sont sales. P>
3 Réponses :
En supposant que l'état de l'objet ne puisse pas être consulté directement (par exemple, aucun champ Public ou package protégé) et n'est pas traitée par la réflexion, vous pouvez mettre un point d'arrêt au début de toutes les méthodes de l'objet et exécuter le scénario. qui rend l'objet sale dans le débogueur. p>
J'utiliserais un intercepteur. La méthode OnflushDirty obtient l'état actuel et précédent afin que vous puissiez les comparer. Implémentez l'interception de l'intercepteur et étendez VideInterceptor, primordial OnflushDirty. Ajoutez ensuite une instance de cette classe à l'aide de Configuration.setterceptor (le ressort peut vous obliger à le faire différemment). Vous pouvez également ajouter un intercepteur à la session plutôt qu'au démarrage. P>
Cela ne vous dira pas Qu'est-ce que i> a fait un objet sale que quels champs sont sales. Le rinçage se produit après que l'objet change d'état, souvent à la fin de la transaction.
Une description supplémentaire de l'erreur / problème exact plus que certains codes auraient peut-être une meilleure chance pour une réponse