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 :

erreur "Class A uses a non-entity class B


Sujet :

JPA Java

  1. #1
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut erreur "Class A uses a non-entity class B
    Bonsoir,

    j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Exception Description: [class Metier.Promotion.Semestre] uses a non-entity [class Metier.Notes.ReleveNotes] as target entity in the relationship attribute [private java.util.Map Metier.Promotion.Semestre.releves].
            at oracle.toplink.essentials.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:143)
            at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:169)
            at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:110)
            at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
            at DAO.Dao.init(Dao.java:34)
            at Main.Lancement.main(Lancement.java:29)
    Caused by: javax.persistence.PersistenceException: Exception [TOPLINK-28018] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.EntityManagerSetupException
    pour les deux classes entités suivantes :
    Semestre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    @Entity
    @Table(name = "Semestre_Discipline")
    public class Semestre extends Observable implements IDataBase {
     
        static private final long serialVersionUID = 73L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        @ManyToOne
        private ASemestre semestre;
        @OneToMany
        private List<Etudiant> mEtudiant;    // liste des étudiants
     
        @OneToMany
        private Map<Module, Enseignant> cours;// liste des cours
     
     
     
     
        @OneToMany
        private Map<Module, java.lang.Boolean[]> epreuves;/* liste des épreuves
        (Devoir , TD , TP, Projet)    */
     
        @OneToMany
        private Map<Etudiant, ReleveNotes> releves;/*  liste des relevés 
                                                        de notes de chaque étudiant   */
    ...
    RelevesNotes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    @Entity
    @Table(name="Releves de notes")
    public class ReleveNotes extends Observable implements Observer,Serializable {
     
        static private final long serialVersionUID = 41L;
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
     
        @OneToOne
        private Etudiant etudiant;
        @ManyToOne
        private Semestre semestre;
     
    ...
    vous avez une idée ?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    @Table(name="Releves de notes")

    des espaces dans un nom de table ?

  3. #3
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    @Table(name="Releves de notes")

    des espaces dans un nom de table ?
    même si j'enlève les espaces, ça ne change rien au problème

    merci comme même

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par bassim Voir le message
    même si j'enlève les espaces, ça ne change rien au problème

    merci comme même
    les annotations semblant ok pour ReleveNotes, avez-vous vérifié qu'elles l'étaient aussi pour toutes les classes référencées (directement et indirectement) par ReleveNotes ?

    Vérifiez le schéma généré…

  5. #5
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    les annotations semblant ok pour ReleveNotes, avez-vous vérifié qu'elles l'étaient aussi pour toutes les classes référencées (directement et indirectement) par ReleveNotes ?

    Vérifiez le schéma généré…
    bon je mets tout les attributs et les références pour que ça soit plus clair:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    @Entity
    @Table(name="Releves_de_notes")
    public class ReleveNotes extends Observable implements Observer,Serializable {
     
        static private final long serialVersionUID = 41L;
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
     
        @OneToOne
        private Etudiant etudiant;
     
        @ManyToOne
        private Semestre semestre;
     
        @OneToMany(mappedBy = "releve")
        private List<Note> notes;
     
        //@OneToMany
        private transient Map<Module, Boolean> modulesAcquis;
     
        //@OneToMany
        private transient Map<UE, Boolean>     UEsAcquises;
     
        private float moyenneGenerale;
        private float moyenneFinAnnee;
        private int sommeCreditsFinAnnee;  // ou fin de semestre
     
        private float moyenneApresRattrapage;
        private int sommeCreditsApresRattrapage;
    ...
    la classe Note :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    @Entity
    public class Note extends Observable implements Serializable {
     
        static private final long serialVersionUID = 40L;
     
     
        @Id
        private Long id;
     
        @OneToOne
        private Module module;
     
        public Module getModule() {
            return module;
        }
     
        public void setModule(Module module) {
            this.module = module;
        }
     
        @ManyToOne
        private ReleveNotes releve;
     
     
        private float noteEpreuve;
     
        private float noteTD;
     
        private float noteTP;
     
        private float noteProjet;
     
        private float noteExamen;
     
        private float noteRattrapage;
     
        private float noteRattrapage2;
     
        private float moyenneControle;
     
        private float moyenne;
     
        private Boolean[] epreuves;
    j'ai vérifié les références, mais je n'ai rien constaté d'anormal ...
    mais j'ai remarqué qu'avec les MAP ça pose toujours un problème

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par bassim Voir le message
    bon je mets tout les attributs et les références pour que ça soit plus clair:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Entity
    @Table(name="Releves_de_notes")
    public class ReleveNotes extends Observable implements Observer,Serializable {
     
     
        //@OneToMany
        private transient Map<Module, Boolean> modulesAcquis;
     
        //@OneToMany
        private transient Map<UE, Boolean>     UEsAcquises;
     
     
    ...
    j'ai vérifié les références, mais je n'ai rien constaté d'anormal ...
    mais j'ai remarqué qu'avec les MAP ça pose toujours un problème
    exemple de Map qui fonctionne ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	@OneToMany(cascade=CascadeType.ALL)
    	@MapKey(columns=@Column(name="language", length=6))
    	@JoinTable(name="PUBLICATION_DESCRIPTIONS",
    		joinColumns= @JoinColumn(name="ref_publication"),
    		inverseJoinColumns = @JoinColumn(name = "ref_description"))
    	protected java.util.Map<String,Description>		itsDescriptions = new HashMap<String,Description>() ;

  7. #7
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    bon, j'ai résolue ce problème

    Mais je ne suis pas sur de son origine . j'ai en fait changé l'implémentation du Map en List, puisque j'avais deja une liste des étudiants et que la classe RelevesNotes contient deja une référence vers Etudiant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @OneToMany
        private List<Etudiant> mEtudiant;    // liste des étudiants
     
    @OneToMany(mappedBy = "semestre")
        private List<ReleveNotes> releves;
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @OneToMany
        private List<Etudiant> mEtudiant;    // liste des étudiants
     
    @OneToMany(mappedBy = "semestre")
        private Map<Etudiant, ReleveNotes> releves;
    mais là, je suis entrain de toucher à mon code métier

    ensuite, cette erreur m'est survenu plusieurs fois apres pour d'autres classes mais à chaque fois j'ai reussi corriger le probleme en se basant sur le dernier !

    Maintenant, j'ai la meme erreur avec une autre classe ,
    cette fois je vois pas du tout ou est le probleme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception Description: [class Metier.Promotion.EtatsSemestre.AbstractEtatSemestre] uses a non-entity [class Metier.Promotion.Semestre] as target entity in the relationship attribute [protected Metier.Promotion.Semestre Metier.Promotion.EtatsSemestre.AbstractEtatSemestre.semestre].
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Entity
    @Table(name = "Semestre_Discipline")
    public class Semestre extends Observable implements IDataBase {
     
        ....
     
        @OneToOne
        private Discipline discipline;
     
        @OneToOne
        private AbstractEtatSemestre etat;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Entity
    @Table(name="Etat_Semestre")
    abstract public class AbstractEtatSemestre implements IDataBase {
     
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
     
        @OneToOne(mappedBy = "etat")
        protected Semestre semestre;
    Je précise que j'utilise une autre classe abstraite de la meme façon dans un autre package et ça marche !

  8. #8
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    Problème finalement résolu

    Mon fichier persistence.xml ne contenait pas toutes les classes entités.
    j'avais fait ça pour des tests et j'avais oublié de rajouter les autres classes.

    Résumé de l'histoire : il faut bien vérifier le schéma objet pour ce genre d'erreur;
    Est ce qu'une classe ne référence pas une autre classe non persistante ...

    Maintenant, j'ai un tout autre type d'erreur , mais je vais poster un nouveau sujet pour ça !

    merci

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par bassim Voir le message
    Problème finalement résolu

    Mon fichier persistence.xml ne contenait pas toutes les classes entités.
    j'avais fait ça pour des tests et j'avais oublié de rajouter les autres classes.

    Résumé de l'histoire : il faut bien vérifier le schéma objet pour ce genre d'erreur;
    Est ce qu'une classe ne référence pas une autre classe non persistante ...

    Maintenant, j'ai un tout autre type d'erreur , mais je vais poster un nouveau sujet pour ça !

    merci
    la couche qui implémente la persistence ne supporte pas l'auto-détection des @Entity ?
    (fyi Hibernate le fait et ne nécessite donc plus d'énumérer toutes les classes dans persistence.xml...)

  10. #10
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    la couche qui implémente la persistence ne supporte pas l'auto-détection des @Entity ?
    (fyi Hibernate le fait et ne nécessite donc plus d'énumérer toutes les classes dans persistence.xml...)
    Je connais pas (encore) hibernate,
    mais si je m'amuse à enlever une classe (à partir du fichier persistence) et qui est référencée (càd utilisée comme attribut) par une autre classe, une erreur du même type que le titre du sujet survient !

    les classes dont je parle doivent être toutes annotées avec @Entity

    Edit: je précise que j'essaye de créer ma BDD à partir de mon schéma objet, donc à vrai dire elle n'existe pas encore !

  11. #11
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    Tu n'as pas vraiment besoin de connaitre Hibernate pour l'utilser, et c'est ce qui est génial avec JPA: t'as pas à apprendre un API spécifique à un framework de persistence particulier.
    En gros, il suffit de remplacer le jar de Toplink par ceux d'Hibernate (à l'inverse de Toplink, Hibernate est divisé en nombreux modules et a des dépendances externes) ainsi que de modifier la section properties de persistence.xml pour l'adapter à Hibernate et hop ! Pas même besoin de changer ton code.

    Bonne chance.

  12. #12
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    Citation Envoyé par djo.mos Voir le message
    Bonjour.
    Tu n'as pas vraiment besoin de connaitre Hibernate pour l'utilser, et c'est ce qui est génial avec JPA: t'as pas à apprendre un API spécifique à un framework de persistence particulier.
    En gros, il suffit de remplacer le jar de Toplink par ceux d'Hibernate (à l'inverse de Toplink, Hibernate est divisé en nombreux modules et a des dépendances externes) ainsi que de modifier la section properties de persistence.xml pour l'adapter à Hibernate et hop ! Pas même besoin de changer ton code.

    Bonne chance.
    Oui en effet, disons que d'après ce que j'ai lu Hibernate permet de faire un peu plus de trucs.
    Maintenant, y a t-il une différence de performance , je ne sais pas

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

Discussions similaires

  1. [Mapping] Erreur "Entity class not found"
    Par yo_haha dans le forum Hibernate
    Réponses: 2
    Dernier message: 17/12/2011, 19h14
  2. [Mapping] Erreur "entity class not found"
    Par SpeedOverflow dans le forum Hibernate
    Réponses: 6
    Dernier message: 20/10/2011, 16h12
  3. Erreur "JSF pages from Entities classes"
    Par meryam123 dans le forum JSF
    Réponses: 8
    Dernier message: 08/09/2011, 02h36
  4. Erreur "JSF pages from Entities classes"
    Par meryam123 dans le forum NetBeans
    Réponses: 1
    Dernier message: 06/09/2011, 11h26
  5. Seamm Generate Entities : classe non trouvée
    Par CinePhil dans le forum Seam
    Réponses: 1
    Dernier message: 28/09/2010, 14h00

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