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

Développement Web en Java Discussion :

SQL et classe association


Sujet :

Développement Web en Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 13
    Par défaut SQL et classe association
    Bonjours tout le monde,
    voila je viens de développer une application de gestion de scolarité en JEE,tout d'abord, j'ai pu identifier lé classes suivantes:
    Etudiant-->groupe 1..n-->1..N matiere 1..n-->1..n enseignant
    la classe matiere est définie en tant que classe assiciation,pour cette fin je l'ai représentée par le script suivant:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE Matiere (
      Matiere VARCHAR(50) NOT NULL,
      Classe VARCHAR(60),
      prof VARCHAR(60),
      V_Horraire_cours INT,
      V_Horraire_TD INT,
      V_Horraire_TP INT,
      PRIMARY KEY (Classe,prof,Matiere),
    CONSTRAINT fk_Matiere_enseignant FOREIGN KEY (prof) REFERENCES Enseignant (Prenom),
    CONSTRAINT fk_Matiere_groupe FOREIGN KEY (Classe) REFERENCES Groupe (Nom_group)
    );
    les Beans et le JSF sont générés automatiquement par NETBEANS apartir de la base de données, le probleme est que ,malgrés que la table matiere est bien crées en base de données, il m'arrive un probleme lors de l'exécution de l'application,et si je supprime cette table tt va bien.
    aider moi SVP et merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Peux tu faire voir la trace d'erreur du "probleme" qui t'arrive?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 13
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Peux tu faire voir la trace d'erreur du "probleme" qui t'arrive?
    **********merci pour votre réponse et voila la trace d'erreur************
    In-place deployment at C:\Users\Imed\Documents\NetBeansProjects\UPS\build\web
    deploy?DEFAULT=C:\Users\Imed\Documents\NetBeansProjects\UPS\build\web&name=UPS&force=true failed on GlassFish Server 3.1
    Erreur lors du déploiement*: Exception while preparing the app : Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.EntityManagerSetupException
    Exception Description: Predeployment of PersistenceUnit [UPSPU] failed.
    Internal Exception: Exception [EclipseLink-7220] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.ValidationException
    Exception Description: The @JoinColumns on the annotated element [field enseignant] from the entity class [class Student.Matiere] is incomplete. When the source entity class uses a composite primary key, a @JoinColumn must be specified for each join column using the @JoinColumns. Both the name and the referencedColumnName elements must be specified in each such @JoinColumn.. Pour plus d’informations, consultez le fichier server.log.
    C:\Users\Imed\Documents\NetBeansProjects\UPS\nbproject\build-impl.xml:725:
    The module has not been deployed.
    at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:187)
    at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:106)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor179.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:284)
    at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:539)
    at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:154)
    BUILD FAILED (total time: 58 seconds)[/COLOR][/COLOR]

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The @JoinColumns on the annotated element [field enseignant] from the entity class [class Student.Matiere] is incomplete
    Ton erreur est décrite là, il aime pas le mapping fait dans la table Matiere. cette entité a été aussi générée automatiquement ? ou tu l'as codé à la main? fais voir le code de cette entité et le code de l'entité associée aussi.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 13
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The @JoinColumns on the annotated element [field enseignant] from the entity class [class Student.Matiere] is incomplete
    Ton erreur est décrite là, il aime pas le mapping fait dans la table Matiere. cette entité a été aussi générée automatiquement ? ou tu l'as codé à la main? fais voir le code de cette entité et le code de l'entité associée aussi.
    Merci pour la réponse,de meme cette entité a été générée automatiquement par Netbeans,voila le code de l'entité "matiere",généreé comme suit:clique droite sur le projet -->new-->other-->persistence-->Entity classes from
    database ;
    voila le code source de l'entité:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
      /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package Student;
     
    import java.io.Serializable;
    import java.util.List;
    import javax.persistence.Basic;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Size;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlTransient;
     
    /**
     *
     * @author Imed
     */
    @Entity
    @Table(name = "matiere")
    @XmlRootElement
    @NamedQueries({
        @NamedQuery(name = "Matiere.findAll", query = "SELECT m FROM Matiere m"),
        @NamedQuery(name = "Matiere.findByMatiere", query = "SELECT m FROM Matiere m WHERE m.matiere = :matiere"),
        @NamedQuery(name = "Matiere.findByVHorrairecours", query = "SELECT m FROM Matiere m WHERE m.vHorrairecours = :vHorrairecours"),
        @NamedQuery(name = "Matiere.findByVHorraireTD", query = "SELECT m FROM Matiere m WHERE m.vHorraireTD = :vHorraireTD"),
        @NamedQuery(name = "Matiere.findByVHorraireTP", query = "SELECT m FROM Matiere m WHERE m.vHorraireTP = :vHorraireTP")})
    public class Matiere implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Basic(optional = false)
        @NotNull
        @Size(min = 1, max = 50)
        @Column(name = "Matiere")
        private String matiere;
        @Column(name = "V_Horraire_cours")
        private Integer vHorrairecours;
        @Column(name = "V_Horraire_TD")
        private Integer vHorraireTD;
        @Column(name = "V_Horraire_TP")
        private Integer vHorraireTP;
        @OneToMany(mappedBy = "matiereenseignes")
        private List<Enseignant> enseignantList;
        @OneToMany(mappedBy = "matieres")
        private List<Groupe> groupeList;
     
        public Matiere() {
        }
     
        public Matiere(String matiere) {
            this.matiere = matiere;
        }
     
        public String getMatiere() {
            return matiere;
        }
     
        public void setMatiere(String matiere) {
            this.matiere = matiere;
        }
     
        public Integer getVHorrairecours() {
            return vHorrairecours;
        }
     
        public void setVHorrairecours(Integer vHorrairecours) {
            this.vHorrairecours = vHorrairecours;
        }
     
        public Integer getVHorraireTD() {
            return vHorraireTD;
        }
     
        public void setVHorraireTD(Integer vHorraireTD) {
            this.vHorraireTD = vHorraireTD;
        }
     
        public Integer getVHorraireTP() {
            return vHorraireTP;
        }
     
        public void setVHorraireTP(Integer vHorraireTP) {
            this.vHorraireTP = vHorraireTP;
        }
     
        @XmlTransient
        public List<Enseignant> getEnseignantList() {
            return enseignantList;
        }
     
        public void setEnseignantList(List<Enseignant> enseignantList) {
            this.enseignantList = enseignantList;
        }
     
        @XmlTransient
        public List<Groupe> getGroupeList() {
            return groupeList;
        }
     
        public void setGroupeList(List<Groupe> groupeList) {
            this.groupeList = groupeList;
        }
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (matiere != null ? matiere.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Matiere)) {
                return false;
            }
            Matiere other = (Matiere) object;
            if ((this.matiere == null && other.matiere != null) || (this.matiere != null && !this.matiere.equals(other.matiere))) {
                return false;
            }
            return true;
        }
     
        @Override
        public String toString() {
            return "Student.Matiere[ matiere=" + matiere + " ]";
        }
     
    }
    merci pour votre coopération

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Il est où ce code alors?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 13
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Il est où ce code alors?
    voila le code cher ami:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package Student;
     
    import java.io.Serializable;
    import java.util.List;
    import javax.persistence.Basic;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Size;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlTransient;
     
    /**
     *
     * @author Imed
     */
    @Entity
    @Table(name = "matiere")
    @XmlRootElement
    @NamedQueries({
        @NamedQuery(name = "Matiere.findAll", query = "SELECT m FROM Matiere m"),
        @NamedQuery(name = "Matiere.findByMatiere", query = "SELECT m FROM Matiere m WHERE m.matiere = :matiere"),
        @NamedQuery(name = "Matiere.findByVHorrairecours", query = "SELECT m FROM Matiere m WHERE m.vHorrairecours = :vHorrairecours"),
        @NamedQuery(name = "Matiere.findByVHorraireTD", query = "SELECT m FROM Matiere m WHERE m.vHorraireTD = :vHorraireTD"),
        @NamedQuery(name = "Matiere.findByVHorraireTP", query = "SELECT m FROM Matiere m WHERE m.vHorraireTP = :vHorraireTP")})
    public class Matiere implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Basic(optional = false)
        @NotNull
        @Size(min = 1, max = 50)
        @Column(name = "Matiere")
        private String matiere;
        @Column(name = "V_Horraire_cours")
        private Integer vHorrairecours;
        @Column(name = "V_Horraire_TD")
        private Integer vHorraireTD;
        @Column(name = "V_Horraire_TP")
        private Integer vHorraireTP;
        @OneToMany(mappedBy = "matiereenseignes")
        private List<Enseignant> enseignantList;
        @OneToMany(mappedBy = "matieres")
        private List<Groupe> groupeList;
     
        public Matiere() {
        }
     
        public Matiere(String matiere) {
            this.matiere = matiere;
        }
     
        public String getMatiere() {
            return matiere;
        }
     
        public void setMatiere(String matiere) {
            this.matiere = matiere;
        }
     
        public Integer getVHorrairecours() {
            return vHorrairecours;
        }
     
        public void setVHorrairecours(Integer vHorrairecours) {
            this.vHorrairecours = vHorrairecours;
        }
     
        public Integer getVHorraireTD() {
            return vHorraireTD;
        }
     
        public void setVHorraireTD(Integer vHorraireTD) {
            this.vHorraireTD = vHorraireTD;
        }
     
        public Integer getVHorraireTP() {
            return vHorraireTP;
        }
     
        public void setVHorraireTP(Integer vHorraireTP) {
            this.vHorraireTP = vHorraireTP;
        }
     
        @XmlTransient
        public List<Enseignant> getEnseignantList() {
            return enseignantList;
        }
     
        public void setEnseignantList(List<Enseignant> enseignantList) {
            this.enseignantList = enseignantList;
        }
     
        @XmlTransient
        public List<Groupe> getGroupeList() {
            return groupeList;
        }
     
        public void setGroupeList(List<Groupe> groupeList) {
            this.groupeList = groupeList;
        }
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (matiere != null ? matiere.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Matiere)) {
                return false;
            }
            Matiere other = (Matiere) object;
            if ((this.matiere == null && other.matiere != null) || (this.matiere != null && !this.matiere.equals(other.matiere))) {
                return false;
            }
            return true;
        }
     
        @Override
        public String toString() {
            return "Student.Matiere[ matiere=" + matiere + " ]";
        }
     
    }
    merci pour votre coopération

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Il y'a un truc que je comprends pas dans ton mapping
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matiere 1..n-->1..n enseignant
    , d'apres tes cardinalités,on s'attendrait à avoir du ManyToMany entre Matiere et Enseignant, or je vois un OneToMany dans ton mapping. Qu'à cela ne tienne si tu veux conserver cette cardinalité telle quelle il faudrait que du coté Enseignant, en bas du ManyToOne tu mettes un JoinColumn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @JoinColumn(name="NOM_DE_LA_COLONNE_ID_DANS_ENSEIGNANT", referencedColumnName="NOM_DE_LA_COLONNE_ID_DANS_ENSEIGNANT", nullable=false)
    Ca marchera mieux.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 13
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Il y'a un truc que je comprends pas dans ton mapping
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matiere 1..n-->1..n enseignant
    , d'apres tes cardinalités,on s'attendrait à avoir du ManyToMany entre Matiere et Enseignant, or je vois un OneToMany dans ton mapping. Qu'à cela ne tienne si tu veux conserver cette cardinalité telle quelle il faudrait que du coté Enseignant, en bas du ManyToOne tu mettes un JoinColumn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @JoinColumn(name="NOM_DE_LA_COLONNE_ID_DANS_ENSEIGNANT", referencedColumnName="NOM_DE_LA_COLONNE_ID_DANS_ENSEIGNANT", nullable=false)
    Ca marchera mieux.
    merci bien pour ta réponse,mais moi j'utilise la classe (table) matiere come un classe-association,puisque le mapping :group-->enseignant est un manytomany,
    cordialement

Discussions similaires

  1. [hibernate]Problème mapping classe association
    Par jsl1 dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/06/2006, 17h27
  2. [Hibernate] Mapper une classe association
    Par mauvais_karma dans le forum Hibernate
    Réponses: 16
    Dernier message: 25/01/2006, 12h34
  3. [Hibernate] remplir une classes association
    Par mauvais_karma dans le forum Hibernate
    Réponses: 13
    Dernier message: 31/08/2005, 16h38
  4. [SQL SERVER 2000] Association ?
    Par Tankian dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/06/2004, 11h56

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