Bonjour à tous,
J'ai un problème que je n'arrive pas à m'expliquer avec le cache et la manière dont Hibernate utilise les proxy CGLIB. Voilà le problème:
- lors du premier appel au DAO, je récupère une liste de Contact, tous chargés intégralement (d'après ce que je vois dans le debugger), et tout se passe bien. D'après les logs, les objets sont bien mis en cache.
le résultat dans le DAO est retourné avec list()
return req.setCacheable(true).list();
- lors du deuxième appel au DAO, avec les même paramètres, je vois bien dans les logs que les objets sont retirés du cache. La plupart des objects sont bien chargés intégralement, mais pas les derniers de la liste. Au début, seul le dernier de la liste (sur 41) n'était pas de type Contact, mais Contact$$EnhancerByCGLIB d'après ce que je vois dans le debugger. Je me suis dit que cela venait peut être de l'objet en lui même, donc j'ai inversé l'ordre de tri dans le DAO pour voir. Et là, je me rends compte que l'objet qui n'était pas initialisé correctement la première fois l'était ce coup ci, mais qu'en triant dans l'autre sens, c'était les deux derniers objets renvoyés qui était proxyfiés.
le problème, c'est que je passe la liste de contacts à un JsonBeanProcessor (pour sérialiser la liste): tout se passe bien sur les objets de type Contact, mais je crois qu'à un moment, il fait un "instance of" pour vérifier que l'objet est bien du type attendu, mais que vu que l'objet est de type Contact$$EnhancerByCGLIB, ça ne fonctionne pas, et ça plante.
Comment faire dans ce cas là ? a priori, 2 solutions:
- comment forcer le DAO à renvoyer une liste d'objets non proxyfiés (mais en utilisant quand même le cache) ?
- comment faire pour qu'une "instance of" sur un objet de type Contact$$EnhancerByCGLIB renvoie bien Contact ?
Ou alors autre chose ? je ne sais pas, si quelqu'un a une idée, je suis preneur 
merci d'avance
--
Vincent
Partager