IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

objets proxyfiés bizarrement


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 18
    Par défaut objets proxyfiés bizarrement
    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()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre chevronné
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Par défaut
    utilises-tu le batch-fetching avec au hasard une taille de 40 ? ca expliquerait le chargement des 40 premiers objets de ta requete.

    par ailleurs tu peux spécifier une classe proxy dans le mapping qui sera utilisée à la place des proxy générés par CGLIB. Avantage : les instanceof et les downcast fonctionnent. Inconvénient : demande des modifications importantes (définir une interface java par classe persistante)

    pour plus d'info :
    http://www.hibernate.org/hib_docs/re...initialization

Discussions similaires

  1. syntaxe d'appel à un objet bizarre
    Par membreComplexe12 dans le forum C++
    Réponses: 8
    Dernier message: 12/01/2011, 13h18
  2. [10g] Le drop laisse des objets "bizarres"
    Par Oxygene dans le forum Oracle
    Réponses: 9
    Dernier message: 22/02/2005, 15h18
  3. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo