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

JPA Java Discussion :

java lang ClassCastException


Sujet :

JPA Java

  1. #1
    Membre expérimenté
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Par défaut java lang ClassCastException
    Bonjour,
    je fais un projet JEE sans JTA, et j'ai un probleme dans mon bean de session.
    En effet j'ai compris que sans JTA, on ne pouvait dialoguer avec la Base de Données que à travers des requêtes JPQL, mais lorsque je fais un select celle-ci me renvoie constamment une erreur

    Lorsque j'exécute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                //la requête est :  "SELECT c FROM Compte c WHERE c.id = :id")
                Compte c = (Compte) em.createNamedQuery("findAccountById").
                            setParameter("id", accountId).getSingleResult();
    ça me renvoit l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.lang.ClassCastException: entity.Compte cannot be cast to entity.Compte
    L'erreur semble tout d'abord très très conne, mais en plus je ne comprends vraiment pas pourquoi il me la sort. Les objets de la classe ont été persisté auparavant, donc ma classe entity.Compte est bien une entité.

    Je ne comprends vraiment pas pourquoi il me sort cet erreur là.
    si quelqu'un a une idée ça m'intéresse.
    Cordialement

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Par défaut
    Bonjour,
    l'explication je peux sans problème la donner mais la solution simple, je la cherche toujours

    Si cela peut paraitre absurde, on peut tout à fait avoir un java.lang.ClassCastException: entity.Compte cannot be cast to entity.Compte

    Le "casting" d'un object ne se fait pas uniquement sur le nom de l'objet mais la JVM vérifie aussi l'identité de l'object dans son classloader. Si les 2 instances de l'objet ne font pas partie du même classloader, alors c'est comme faire un Integer value = (Integer) stringObject;

    Dans l'API Persistence, "createEntityManagerFactory" génère un cache de la factory avec le classloader courant de la création. Ce qui fait qu'à chaque nouveau deployment d'un EJB (ou autre), on a un nouveau classloader différent de la factory en cache.
    Ainsi, à chaque requête, les objets sont créés depuis le classloader d'origine et on les "caste" en un objet d'un classloader différent.

    Solution "bourrin" : stop server, start server... magic it's working.


    Solution non testée mais qui a priori doit fonctionner si j'en crois les forums que j'ai pu lire sur le sujet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Map<String, Object> prop = new HashMap<String, Object>();
    prop.put(PersistenceUnitProperties.CLASSLOADER,
                 entity.Compte.class.getClassLoader());
    emf = Persistence.createEntityManagerFactory("PU", prop);
    cdlt

  3. #3
    Membre expérimenté
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Par défaut
    merci pour ta réponse bien précise et très claire, je vais essayer ca tout de suite

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Par défaut
    euh ... d'où provient la classe PersistenceUnitProperties ?

    est-ce-qu'il faut mettre un jar spécial pour l'avoir ?
    merci d'avance

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Par défaut
    Je suis parti du principe que vous utilisez eclipseLink comme service de persistence puisque ce phénomène est (à ma connaissance) spécifique à eclipseLink. Je n'ai pas rencontré ce problème avec topLink.

    Donc si c'est bien le cas, ça se trouve dans org.eclipse.persistence.core.jar

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Par défaut
    oui j'utilise bien eclipse-link, mais je suis sous netbeans et il ne me reconnait pas cette classe.

    je ne savais pas que c'etait une erreur spécifique à eclipselink, je vais donc essayer avec toplink pour voir si ca marche.

    un grand grand merci pour vos réponses !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Par défaut
    avant de remplacer eclipselink par toplink :

    static final String org.eclipse.persistence.config.PersistenceUnitProperties.CLASSLOADER = "eclipselink.classloader"

  8. #8
    Membre expérimenté
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Par défaut
    bonjour

    donc même avec votre dernier post je n'ai pas réussi à le faire marcher sous eclipse-link

    par contre toplink marche directement, donc merci beaucoup pour les informations

    cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur java java.lang.ClassCastException
    Par yLaplace dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2007, 18h17
  2. pb java.lang.ClassCastException: $Proxy84
    Par chakala dans le forum Wildfly/JBoss
    Réponses: 10
    Dernier message: 15/03/2007, 14h21
  3. JSP javamail java.lang.ClassCastException
    Par itr dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 14/06/2006, 17h01
  4. [EJB3] java.lang.ClassCastException
    Par n00noors dans le forum Java EE
    Réponses: 9
    Dernier message: 21/02/2006, 15h06
  5. Réponses: 16
    Dernier message: 10/01/2006, 22h02

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