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 :

@JoinTable ou bien @JoinColumn


Sujet :

JPA Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut @JoinTable ou bien @JoinColumn
    Bonjour.

    comme j'ai toujours pas résolu mon problème, je vais essayer de reformuler ma question

    je veux faire des requête EJB3 QL avec des jointure.

    voici mes tables :
    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
    CREATE TABLE `umlssnmi` (
      `AUIS` varchar(20) NOT NULL default '',
      `CUI` varchar(20) NOT NULL default '',
      `CODE` varchar(20) NOT NULL default '',
      `TTY` varchar(5) NOT NULL default '',
      `STR` varchar(255) NOT NULL default '',
      `HIER` varchar(255) NOT NULL default '',
      `PROF` tinyint(2) NOT NULL default '0',
      `AXE` char(1) NOT NULL default 'D',
      PRIMARY KEY  (`AUIS`),
      KEY `CODE` (`CODE`),
      KEY `TTY` (`TTY`),
      KEY `CUI` (`CUI`),
      KEY `AXE` (`AXE`)
    ) TYPE=MyISAM;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     CREATE TABLE `whoart` (
      `AUIW` varchar(10) NOT NULL default '',
      `CODE` varchar(10) NOT NULL default '',
      `STR` varchar(255) NOT NULL default '',
      `FSTR` varchar(255) NOT NULL default '',
      `SOC` varchar(5) NOT NULL default '',
      `SEMTYPE` varchar(5) NOT NULL default '',
      `SRC` enum('WA','CIM') NOT NULL default 'WA',
      PRIMARY KEY  (`AUIW`),
      KEY `SOC` (`SOC`),
      KEY `CODE` (`CODE`)
    ) TYPE=MyISAM;
    Sachant que j'ai la table suivante qui a comme clès primaires les deux clès primaires des tables précedente.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE `wasnmi` (
      `AUIW` varchar(20) NOT NULL default '',
      `AUIS` varchar(20) NOT NULL default '',
      `MODIF` varchar(10) default NULL,
      `SRC` enum('S','MW','MS','MA') NOT NULL default 'S',
      PRIMARY KEY  (`AUIW`,`AUIS`),
      KEY `MOD` (`SRC`),
      KEY `MODIF` (`MODIF`)
    ) TYPE=MyISAM;
    sachant que la cardinalité entre ces tables et ManyToMany, ma question et de savoir si pour que je puisse faire une jointure entre mes tables je dois créer des tables intermédiares qui contiennent que les clès primaires genre umlssnmi_wasnmi et whoart_wasnmi par exemple, et faire des @JoinTable; ou bien la table "wasnmi" faira l'affaire.

    toute idée sera la bien venue

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    ta table n'est pas seuleument une jointure (plutôt une classe association)

    Il faut utiliser l'annotation @AssociationTable (Cf. lien ci dessous)

    http://www.it-eye.nl/weblog/2006/02/...ion-in-action/


    En esperant que ton serveur d'application implémente cette option.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut
    je vous remercie, je vais voir ça de prés.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut
    Bonjour,
    Apparemment @AssiociationTable n'est pas suporté par JBoss 4.0.4.
    j'ai essayé d'utliser @JoinTable à la place mais ça marche pas.

    voici mes entity beans:
    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
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    /*
     * TermSource.java
     * 
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package ejb.entity;
     
    import java.io.Serializable;
    import java.util.Collection;
    import javax.persistence.Basic;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
     
    /**
     *
     * @author david
     */
    @Entity
    @Table(name = "whoart")
    @NamedQueries( {@NamedQuery(name = "TermSource.findByAuiw", query = "SELECT t FROM TermSource t WHERE t.auiw = :auiw"), @NamedQuery(name = "TermSource.findByCode", query = "SELECT t FROM TermSource t WHERE t.code = :code"), @NamedQuery(name = "TermSource.findByStr", query = "SELECT t FROM TermSource t WHERE t.str = :str"), @NamedQuery(name = "TermSource.findByFstr", query = "SELECT t FROM TermSource t WHERE t.fstr = :fstr"), @NamedQuery(name = "TermSource.findBySoc", query = "SELECT t FROM TermSource t WHERE t.soc = :soc"), @NamedQuery(name = "TermSource.findBySemtype", query = "SELECT t FROM TermSource t WHERE t.semtype = :semtype"), @NamedQuery(name = "TermSource.findBySrc", query = "SELECT t FROM TermSource t WHERE t.src = :src")})
    public class TermSource implements Serializable {
     
     
     
     
        @Id
        @Column(name = "AUIW", nullable = false)
        private String auiw;
     
        @Column(name = "CODE", nullable = false)
        private String code;
     
        @Column(name = "STR", nullable = false)
        private String str;
     
        @Column(name = "FSTR", nullable = false)
        private String fstr;
     
        @Column(name = "SOC", nullable = false)
        private String soc;
     
        @Column(name = "SEMTYPE", nullable = false)
        private String semtype;
     
        @Column(name = "SRC", nullable = false)
        private String src;
     
     
        /** Creates a new instance of TermSource */
        public TermSource() {
        }
     
        public TermSource(String auiw) {
            this.setAuiw(auiw);
        }
     
        public TermSource(String auiw, String code, String str, String fstr, String soc, String semtype, String src) {
            this.setAuiw(auiw);
            this.setCode(code);
            this.setStr(str);
            this.setFstr(fstr);
            this.setSoc(soc);
            this.setSemtype(semtype);
            this.setSrc(src);
        }
     
        public String getAuiw() {
            return this.auiw;
        }
     
        public void setAuiw(String auiw) {
            this.auiw = auiw;
        }
     
        public String getCode() {
            return this.code;
        }
     
        public void setCode(String code) {
            this.code = code;
        }
     
        public String getStr() {
            return this.str;
        }
     
        public void setStr(String str) {
            this.str = str;
        }
     
        public String getFstr() {
            return this.fstr;
        }
     
        public void setFstr(String fstr) {
            this.fstr = fstr;
        }
     
        public String getSoc() {
            return this.soc;
        }
     
        public void setSoc(String soc) {
            this.soc = soc;
        }
     
        public String getSemtype() {
            return this.semtype;
        }
     
        public void setSemtype(String semtype) {
            this.semtype = semtype;
        }
     
        public String getSrc() {
            return this.src;
        }
     
        public void setSrc(String src) {
            this.src = src;
        }
     
        private Collection<SnomedInter> snomedInters;
        @ManyToMany (targetEntity=SnomedInter.class)
        @JoinTable(name="wasnmi",joinColumns=@JoinColumn(name="auiw"),inverseJoinColumns=@JoinColumn(name="auis"))
     
         public Collection<SnomedInter> getSnomedInters() {
            return snomedInters;
        }
     
        public void setSnomedInters(Collection<SnomedInter> snomedInters) {
            this.snomedInters = snomedInters;
        }
     
     
     
        public int hashCode() {
            int hash = 0;
            hash += (this.getAuiw() != null ? this.getAuiw().hashCode() : 0);
            return hash;
        }
     
        public boolean equals(Object object) {
            if (!(object instanceof TermSource)) {
                return false;
            }
            TermSource other = (TermSource)object;
            if (this.getAuiw() != other.getAuiw() && (this.getAuiw() == null || !this.getAuiw().equals(other.getAuiw()))) return false;
            return true;
        }
     
        public String toString() {
            return "ejb.entity.TermSource[auiw=" + getAuiw() + "]";
        }
     
    }
    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
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    /*
     * SnomedInter.java
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package ejb.entity;
     
    import java.io.Serializable;
    import java.util.Collection;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.ManyToMany;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
     
    /**
     *
     * @author David
     */
    @Entity
    @Table(name = "umlssnmi")
    @NamedQueries( {@NamedQuery(name = "SnomedInter.findByAuis", query = "SELECT s FROM SnomedInter s WHERE s.auis = :auis"), @NamedQuery(name = "SnomedInter.findByCui", query = "SELECT s FROM SnomedInter s WHERE s.cui = :cui"), @NamedQuery(name = "SnomedInter.findByCode", query = "SELECT s FROM SnomedInter s WHERE s.code = :code"), @NamedQuery(name = "SnomedInter.findByTty", query = "SELECT s FROM SnomedInter s WHERE s.tty = :tty"), @NamedQuery(name = "SnomedInter.findByStr", query = "SELECT s FROM SnomedInter s WHERE s.str = :str"), @NamedQuery(name = "SnomedInter.findByHier", query = "SELECT s FROM SnomedInter s WHERE s.hier = :hier"), @NamedQuery(name = "SnomedInter.findByProf", query = "SELECT s FROM SnomedInter s WHERE s.prof = :prof"), @NamedQuery(name = "SnomedInter.findByAxe", query = "SELECT s FROM SnomedInter s WHERE s.axe = :axe")})
    public class SnomedInter implements Serializable {
     
        @Id
        @Column(name = "AUIS", nullable = false)
        private String auis;
     
        @Column(name = "CUI", nullable = false)
        private String cui;
     
        @Column(name = "CODE", nullable = false)
        private String code;
     
        @Column(name = "TTY", nullable = false)
        private String tty;
     
        @Column(name = "STR", nullable = false)
        private String str;
     
        @Column(name = "HIER", nullable = false)
        private String hier;
     
        @Column(name = "PROF", nullable = false)
        private short prof;
     
        @Column(name = "AXE", nullable = false)
        private char axe;
     
     
     
        /** Creates a new instance of SnomedInter */
        public SnomedInter() {
        }
     
        public SnomedInter(String auis) {
            this.setAuis(auis);
        }
     
        public SnomedInter(String auis, String cui, String code, String tty, String str, String hier, short prof, char axe) {
            this.setAuis(auis);
            this.setCui(cui);
            this.setCode(code);
            this.setTty(tty);
            this.setStr(str);
            this.setHier(hier);
            this.setProf(prof);
            this.setAxe(axe);
        }
     
     
     
        public String getAuis() {
            return this.auis;
        }
     
        public void setAuis(String auis) {
            this.auis = auis;
        }
     
        public String getCui() {
            return this.cui;
        }
     
        public void setCui(String cui) {
            this.cui = cui;
        }
     
        public String getCode() {
            return this.code;
        }
     
        public void setCode(String code) {
            this.code = code;
        }
     
        public String getTty() {
            return this.tty;
        }
     
        public void setTty(String tty) {
            this.tty = tty;
        }
     
        public String getStr() {
            return this.str;
        }
     
        public void setStr(String str) {
            this.str = str;
        }
     
        public String getHier() {
            return this.hier;
        }
     
        public void setHier(String hier) {
            this.hier = hier;
        }
     
        public short getProf() {
            return this.prof;
        }
     
        public void setProf(short prof) {
            this.prof = prof;
        }
     
        public char getAxe() {
            return this.axe;
        }
     
        public void setAxe(char axe) {
            this.axe = axe;
        }
     
        private Collection<TermSource> termSources;
        @ManyToMany(mappedBy = "snomedInters",targetEntity =TermSource.class )
     
        public Collection<TermSource> getTermSources() {
            return termSources;
        }
     
        public void setTermSources(Collection<TermSource> termSources) {
            this.termSources = termSources;
        }
     
        public int hashCode() {
            int hash = 0;
            hash += (this.getAuis() != null ? this.getAuis().hashCode() : 0);
            return hash;
        }
     
        public boolean equals(Object object) {
            if (!(object instanceof SnomedInter)) {
                return false;
            }
            SnomedInter other = (SnomedInter)object;
            if (this.getAuis() != other.getAuis() && (this.getAuis() == null || !this.getAuis().equals(other.getAuis()))) return false;
            return true;
        }
     
        public String toString() {
            return "ejb.entity.SnomedInter[auis=" + getAuis() + "]";
        }
     
      /*  public List<TermSource> getTermSources() {
            return termSources;
        }
     
        public void setTermSources(List<TermSource> termSources) {
            this.termSources = termSources;
        }
       */
     
     
     
    }
    alors que l'entity Bean coorrespondante à la relation qui fais la jointure:
    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
    /*
     * TermProjPK.java
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package ejb.entity;
     
    import java.io.Serializable;
    import javax.persistence.Column;
    import javax.persistence.Embeddable;
    import javax.persistence.Id;
     
    /**
     *
     * @author David
     */
    @Embeddable
    public class TermProjPK implements Serializable {
     
     
        //@Id
        //@Column(name = "AUIW", nullable = false)
        private String auiw;
     
        //@Id
        @Column(name = "AUIS", nullable = false)
        private String auis;
     
        /** Creates a new instance of TermProjPK */
        public TermProjPK() {
        }
     
        public TermProjPK(String auis, String auiw) {
            this.auis = auis;
            this.auiw = auiw;
        }
     
        public String getAuiw() {
            return this.auiw;
        }
     
       /* public void setAuiw(String auiw) {
            this.auiw = auiw;
        } */
     
        public String getAuis() {
            return this.auis;
        }
     
       /* public void setAuis(String auis) {
            this.auis = auis;
        } */
     
        public int hashCode() {
            int hash = 0;
            hash += (this.auis != null ? this.auis.hashCode() : 0);
            hash += (this.auiw != null ? this.auiw.hashCode() : 0);
            return hash;
        }
     
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof TermProjPK)) {
                return false;
            }
            TermProjPK other = (TermProjPK)object;
            if (this.auis != other.auis && (this.auis == null || !this.auis.equals(other.auis))) return false;
            if (this.auiw != other.auiw && (this.auiw == null || !this.auiw.equals(other.auiw))) return false;
            return true;
        }
     
        public String toString() {
            return "ejb.entity.TermProjPK[auis=" + auis + ", auiw=" + auiw + "]";
        }
     
    }
    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
    /*
     * TermProj.java
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package ejb.entity;
     
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    import javax.persistence.Column;
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
     
    /**
     *
     * @author David
     */
    @Entity
    @Table(name = "wasnmi")
    @NamedQueries( {@NamedQuery(name = "TermProj.findByAuiw", query = "SELECT t FROM TermProj t WHERE t.termProjPK.auiw = :auiw"), @NamedQuery(name = "TermProj.findByAuis", query = "SELECT t FROM TermProj t WHERE t.termProjPK.auis = :auis"), @NamedQuery(name = "TermProj.findByModif", query = "SELECT t FROM TermProj t WHERE t.modif = :modif"), @NamedQuery(name = "TermProj.findBySrc", query = "SELECT t FROM TermProj t WHERE t.src = :src")})
    public class TermProj implements Serializable {
     
     
     
        @EmbeddedId
        protected TermProjPK termProjPK;
     
        @Column(name = "MODIF")
        private String modif;
     
        @Column(name = "SRC", nullable = false)
        private String src;
     
        /** Creates a new instance of TermProj */
        public TermProj() {
        }
     
        public TermProj(TermProjPK termProjPK) {
            this.termProjPK = termProjPK;
        }
     
        public TermProj(TermProjPK termProjPK, String src) {
            this.termProjPK = termProjPK;
            this.src = src;
        }
     
        public TermProj(String auis, String auiw) {
            this.termProjPK = new TermProjPK(auis, auiw);
        }
     
        public TermProjPK getTermProjPK() {
            return this.termProjPK;
        }
     
        public void setTermProjPK(TermProjPK termProjPK) {
            this.termProjPK = termProjPK;
        }
     
        public String getModif() {
            return this.modif;
        }
     
        public void setModif(String modif) {
            this.modif = modif;
        }
     
        public String getSrc() {
            return this.src;
        }
     
        public void setSrc(String src) {
            this.src = src;
        }
     
     
        public int hashCode() {
            int hash = 0;
            hash += (this.termProjPK != null ? this.termProjPK.hashCode() : 0);
            return hash;
        }
     
     
        public boolean equals(Object object) {
            if (!(object instanceof TermProj)) {
                return false;
            }
            TermProj other = (TermProj)object;
            if (this.termProjPK != other.termProjPK && (this.termProjPK == null || !this.termProjPK.equals(other.termProjPK))) return false;
            return true;
        }
     
        public String toString() {
            return "ejb.entity.TermProj[termProjPK=" + termProjPK + "]";
        }
     
    }
    n'hésitez pas à m'orienter svp. je vous remercie d'avance



    PS: j'utilise le netBeans 5.5 avec un serveur de depolyement JBoss 4.0.4 intégré.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,
    @associationTable a effectivement été remplacée en cours de spécification.
    Elle a été remplacée par JoinTable.

    Essaie le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    @ManyToMany
    @JoinTable(
    name="wasnmi",
    joinColumns=
    @JoinColumn(name="auiw"),
    inverseJoinColumns=
    @JoinColumn(name="auis")
    )
    Exemple tiré de la JSR220 (http://jcp.org/aboutJava/communitypr...220/index.html)

    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
     
    Example 3:
    In Customer class:
    @ManyToMany
    @JoinTable(
    name="CUST_PHONE",
    joinColumns=
    @JoinColumn(name="CUST_ID", referencedColumnName="ID"),
    inverseJoinColumns=
    @JoinColumn(name="PHONE_ID", referencedColumnName="ID")
    )
    public Set<PhoneNumber> getPhones() { return phones; }
    In PhoneNumberClass:
    @ManyToMany(mappedBy="phones")
    public Set<Customer> getCustomers() { return customers; }

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut
    Bonjour Pietra,
    D’abord je te remercie, en fait j’ai déjà essayé l’annotation @JoinTable
    le problème est que @ManyToMany sert plutôt quand il s’agit de table de jointure qui ne contient que les clés primaires, alors que pour mon cas j’ai d’autre champs comme « modif » et « src » de plus dans ma table d’association. Et du coup avec cette notation je n’arrive pas à accéder à ces champs.
    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
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
     
    /*
     * TermSource.java
     *
     * Created on 22 septembre 2006, 15:45
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package ejb.entity;
     
    import java.io.Serializable;
    import java.util.Collection;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
     
    /**
     *
     * @author naji2
     */
    @Entity
    @Table(name = "whoart")
    @NamedQueries( {@NamedQuery(name = "TermSource.findByAuiw", query = "SELECT t FROM TermSource t WHERE t.auiw = :auiw"), @NamedQuery(name = "TermSource.findByCode", query = "SELECT t FROM TermSource t WHERE t.code = :code"), @NamedQuery(name = "TermSource.findByStr", query = "SELECT t FROM TermSource t WHERE t.str = :str"), @NamedQuery(name = "TermSource.findByFstr", query = "SELECT t FROM TermSource t WHERE t.fstr = :fstr"), @NamedQuery(name = "TermSource.findBySoc", query = "SELECT t FROM TermSource t WHERE t.soc = :soc"), @NamedQuery(name = "TermSource.findBySemtype", query = "SELECT t FROM TermSource t WHERE t.semtype = :semtype"), @NamedQuery(name = "TermSource.findBySrc", query = "SELECT t FROM TermSource t WHERE t.src = :src")})
    public class TermSource implements Serializable {
     
     
     
     
        @Id
        @Column(name = "AUIW", nullable = false)
        private String auiw;
     
        @Column(name = "CODE", nullable = false)
        private String code;
     
        @Column(name = "STR", nullable = false)
        private String str;
     
        @Column(name = "FSTR", nullable = false)
        private String fstr;
     
        @Column(name = "SOC", nullable = false)
        private String soc;
     
        @Column(name = "SEMTYPE", nullable = false)
        private String semtype;
     
        @Column(name = "SRC", nullable = false)
        private String src;
     
     
        /** Creates a new instance of TermSource */
        public TermSource() {
        }
     
        public TermSource(String auiw) {
            this.setAuiw(auiw);
        }
     
        public TermSource(String auiw, String code, String str, String fstr, String soc, String semtype, String src) {
            this.setAuiw(auiw);
            this.setCode(code);
            this.setStr(str);
            this.setFstr(fstr);
            this.setSoc(soc);
            this.setSemtype(semtype);
            this.setSrc(src);
        }
     
        public String getAuiw() {
            return this.auiw;
        }
     
        public void setAuiw(String auiw) {
            this.auiw = auiw;
        }
     
        public String getCode() {
            return this.code;
        }
     
        public void setCode(String code) {
            this.code = code;
        }
     
        public String getStr() {
            return this.str;
        }
     
        public void setStr(String str) {
            this.str = str;
        }
     
        public String getFstr() {
            return this.fstr;
        }
     
        public void setFstr(String fstr) {
            this.fstr = fstr;
        }
     
        public String getSoc() {
            return this.soc;
        }
     
        public void setSoc(String soc) {
            this.soc = soc;
        }
     
        public String getSemtype() {
            return this.semtype;
        }
     
        public void setSemtype(String semtype) {
            this.semtype = semtype;
        }
     
        public String getSrc() {
            return this.src;
        }
     
        public void setSrc(String src) {
            this.src = src;
        }
     
     
     
        @ManyToMany (fetch = FetchType.EAGER ,targetEntity=SnomedInter.class)
        @JoinTable(name="wasnmi",joinColumns=@JoinColumn(name="auiw"),inverseJoinColumns=@JoinColumn(name="auis"))
        private Collection<SnomedInter> snomedInters;
     
         public Collection<SnomedInter> getSnomedInters() {
            return snomedInters;
        }
     
        public void setSnomedInters(Collection<SnomedInter> snomedInters) {
            this.snomedInters = snomedInters;
        } 
     
     
     
        public int hashCode() {
            int hash = 0;
            hash += (this.getAuiw() != null ? this.getAuiw().hashCode() : 0);
            return hash;
        }
     
        public boolean equals(Object object) {
            if (!(object instanceof TermSource)) {
                return false;
            }
            TermSource other = (TermSource)object;
            if (this.getAuiw() != other.getAuiw() && (this.getAuiw() == null || !this.getAuiw().equals(other.getAuiw()))) return false;
            return true;
        }
     
        public String toString() {
            return "ejb.entity.TermSource[auiw=" + getAuiw() + "]";
        }
     
     
     
     
     
     
     
     
     
     
    }
    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
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    /*
     * SnomedInter.java
     *
     * Created on 22 septembre 2006, 15:45
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package ejb.entity;
     
    import java.io.Serializable;
    import java.util.Collection;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.Id;
    import javax.persistence.ManyToMany;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
     
    /**
     *
     * @author naji2
     */
    @Entity
    @Table(name = "umlssnmi")
    @NamedQueries( {@NamedQuery(name = "SnomedInter.findByAuis", query = "SELECT s FROM SnomedInter s WHERE s.auis = :auis"), @NamedQuery(name = "SnomedInter.findByCui", query = "SELECT s FROM SnomedInter s WHERE s.cui = :cui"), @NamedQuery(name = "SnomedInter.findByCode", query = "SELECT s FROM SnomedInter s WHERE s.code = :code"), @NamedQuery(name = "SnomedInter.findByTty", query = "SELECT s FROM SnomedInter s WHERE s.tty = :tty"), @NamedQuery(name = "SnomedInter.findByStr", query = "SELECT s FROM SnomedInter s WHERE s.str = :str"), @NamedQuery(name = "SnomedInter.findByHier", query = "SELECT s FROM SnomedInter s WHERE s.hier = :hier"), @NamedQuery(name = "SnomedInter.findByProf", query = "SELECT s FROM SnomedInter s WHERE s.prof = :prof"), @NamedQuery(name = "SnomedInter.findByAxe", query = "SELECT s FROM SnomedInter s WHERE s.axe = :axe")})
    public class SnomedInter implements Serializable {
     
        @Id
        @Column(name = "AUIS", nullable = false)
        private String auis;
     
        @Column(name = "CUI", nullable = false)
        private String cui;
     
        @Column(name = "CODE", nullable = false)
        private String code;
     
        @Column(name = "TTY", nullable = false)
        private String tty;
     
        @Column(name = "STR", nullable = false)
        private String str;
     
        @Column(name = "HIER", nullable = false)
        private String hier;
     
        @Column(name = "PROF", nullable = false)
        private short prof;
     
        @Column(name = "AXE", nullable = false)
        private char axe;
     
     
     
        /** Creates a new instance of SnomedInter */
        public SnomedInter() {
        }
     
        public SnomedInter(String auis) {
            this.setAuis(auis);
        }
     
        public SnomedInter(String auis, String cui, String code, String tty, String str, String hier, short prof, char axe) {
            this.setAuis(auis);
            this.setCui(cui);
            this.setCode(code);
            this.setTty(tty);
            this.setStr(str);
            this.setHier(hier);
            this.setProf(prof);
            this.setAxe(axe);
        }
     
     
     
        public String getAuis() {
            return this.auis;
        }
     
        public void setAuis(String auis) {
            this.auis = auis;
        }
     
        public String getCui() {
            return this.cui;
        }
     
        public void setCui(String cui) {
            this.cui = cui;
        }
     
        public String getCode() {
            return this.code;
        }
     
        public void setCode(String code) {
            this.code = code;
        }
     
        public String getTty() {
            return this.tty;
        }
     
        public void setTty(String tty) {
            this.tty = tty;
        }
     
        public String getStr() {
            return this.str;
        }
     
        public void setStr(String str) {
            this.str = str;
        }
     
        public String getHier() {
            return this.hier;
        }
     
        public void setHier(String hier) {
            this.hier = hier;
        }
     
        public short getProf() {
            return this.prof;
        }
     
        public void setProf(short prof) {
            this.prof = prof;
        }
     
        public char getAxe() {
            return this.axe;
        }
     
        public void setAxe(char axe) {
            this.axe = axe;
        }
     
     
        @ManyToMany(fetch = FetchType.LAZY, mappedBy = "snomedInters", targetEntity =TermSource.class )
         private Collection<TermSource> termSources;
     
        public Collection<TermSource> getTermSources() {
            return termSources;
        }
     
        public void setTermSources(Collection<TermSource> termSources) {
            this.termSources = termSources;
        } 
     
     
        public int hashCode() {
            int hash = 0;
            hash += (this.getAuis() != null ? this.getAuis().hashCode() : 0);
            return hash;
        }
     
        public boolean equals(Object object) {
            if (!(object instanceof SnomedInter)) {
                return false;
            }
            SnomedInter other = (SnomedInter)object;
            if (this.getAuis() != other.getAuis() && (this.getAuis() == null || !this.getAuis().equals(other.getAuis()))) return false;
            return true;
        }
     
        public String toString() {
            return "ejb.entity.SnomedInter[auis=" + getAuis() + "]";
        }
     
      /*  public List<TermSource> getTermSources() {
            return termSources;
        }
     
        public void setTermSources(List<TermSource> termSources) {
            this.termSources = termSources;
        }
       */
     
     
     
    }
    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
     
    /*
     * TermProjPK.java
     *
     * Created on 25 octobre 2006, 15:02
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package ejb.entity;
     
    import java.io.Serializable;
    import javax.persistence.Column;
    import javax.persistence.Embeddable;
     
    /**
     *
     * @author naji2
     */
    @Embeddable
    public class TermProjPK implements Serializable {
     
     
        //@Id
        //@Column(name = "AUIW", nullable = false)
        //@ManyToOne
        //@JoinColumn(name = "AUIW", nullable = false)
        private String auiw;
     
        //@Id
        @Column(name = "AUIS", nullable = false)
        //@ManyToOne
        //@JoinColumn(name = "AUIS", nullable = false)
        private String auis;
     
        /** Creates a new instance of TermProjPK */
        public TermProjPK() {
        }
     
        public TermProjPK(String auis, String auiw) {
            this.auis = auis;
            this.auiw = auiw;
        }
     
        public String getAuiw() {
            return this.auiw;
        }
     
       /* public void setAuiw(String auiw) {
            this.auiw = auiw;
        } */
     
        public String getAuis() {
            return this.auis;
        }
     
       /* public void setAuis(String auis) {
            this.auis = auis;
        } */
     
        public int hashCode() {
            int hash = 0;
            hash += (this.auis != null ? this.auis.hashCode() : 0);
            hash += (this.auiw != null ? this.auiw.hashCode() : 0);
            return hash;
        }
     
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof TermProjPK)) {
                return false;
            }
            TermProjPK other = (TermProjPK)object;
            if (this.auis != other.auis && (this.auis == null || !this.auis.equals(other.auis))) return false;
            if (this.auiw != other.auiw && (this.auiw == null || !this.auiw.equals(other.auiw))) return false;
            return true;
        }
     
        public String toString() {
            return "ejb.entity.TermProjPK[auis=" + auis + ", auiw=" + auiw + "]";
        }
     
    }
    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
     
    /*
     * TermProj.java
     *
     * Created on 25 octobre 2006, 15:02
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package ejb.entity;
     
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    import javax.persistence.Column;
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
     
    /**
     *
     * @author naji2
     */
    @Entity
    @Table(name = "wasnmi")
    @NamedQueries( {@NamedQuery(name = "TermProj.findByAuiw", query = "SELECT t FROM TermProj t WHERE t.termProjPK.auiw = :auiw"), @NamedQuery(name = "TermProj.findByAuis", query = "SELECT t FROM TermProj t WHERE t.termProjPK.auis = :auis"), @NamedQuery(name = "TermProj.findByModif", query = "SELECT t FROM TermProj t WHERE t.modif = :modif"), @NamedQuery(name = "TermProj.findBySrc", query = "SELECT t FROM TermProj t WHERE t.src = :src")})
    public class TermProj implements Serializable {
     
     
     
        @EmbeddedId
        protected TermProjPK termProjPK;
     
        @Column(name = "MODIF")
        private String modif;
     
        @Column(name = "SRC", nullable = false)
        private String src;
     
        /** Creates a new instance of TermProj */
        public TermProj() {
        }
     
        public TermProj(TermProjPK termProjPK) {
            this.termProjPK = termProjPK;
        }
     
        public TermProj(TermProjPK termProjPK, String src) {
            this.termProjPK = termProjPK;
            this.src = src;
        }
     
        public TermProj(String auis, String auiw) {
            this.termProjPK = new TermProjPK(auis, auiw);
        }
     
        public TermProjPK getTermProjPK() {
            return this.termProjPK;
        }
     
        public void setTermProjPK(TermProjPK termProjPK) {
            this.termProjPK = termProjPK;
        }
     
        public String getModif() {
            return this.modif;
        }
     
        public void setModif(String modif) {
            this.modif = modif;
        }
     
        public String getSrc() {
            return this.src;
        }
     
        public void setSrc(String src) {
            this.src = src;
        }
     
     
        public int hashCode() {
            int hash = 0;
            hash += (this.termProjPK != null ? this.termProjPK.hashCode() : 0);
            return hash;
        }
     
     
        public boolean equals(Object object) {
            if (!(object instanceof TermProj)) {
                return false;
            }
            TermProj other = (TermProj)object;
            if (this.termProjPK != other.termProjPK && (this.termProjPK == null || !this.termProjPK.equals(other.termProjPK))) return false;
            return true;
        }
     
        public String toString() {
            return "ejb.entity.TermProj[termProjPK=" + termProjPK + "]";
        }
     
    }
    et voici une partie de ma servlet

    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
    TermSourceFacadeLocal termSourceFacade = (TermSourceFacadeLocal) lookupTermSourceFacade();
     
            out.println("<h1> Affichage de la table WHOT-ART grâce à la methode findAll(): <h1>");
     
            List news = termSourceFacade.findAll();
     
     
            out.println("<TABLE align=\"center\" frame=\"border\" cellpadding=\"2\">");
            out.println("<TR style=\"color:blue\"> <TH align=\"center\" > AUIW </TH> <TH align=\"center\"> CODE </TH> <TH align=\"center\"> STR </TH><TH align=\"center\"> FSTR </TH><TH align=\"center\"> SOC </TH><TH align=\"center\"> SEMTYPE </TH><TH align=\"center\"> SRC </TH><TH align=\"center\"> AUIS </TH><TH align=\"center\"> CUI </TH></TR>");
            //out.println("<TR style=\"color:blue\"> <TH align=\"center\" > AUIW </TH> <TH align=\"center\"> CODE </TH> <TH align=\"center\"> STR </TH><TH align=\"center\"> FSTR </TH><TH align=\"center\"> SOC </TH><TH align=\"center\"> SEMTYPE </TH><TH align=\"center\"> SRC </TH></TR>");
            for (Iterator it = news.iterator(); it.hasNext();) {
                TermSource elem = (TermSource) it.next();            
     
                Collection<SnomedInter> snomedInters = elem.getSnomedInters();
                Iterator itSnomedInter = snomedInters.iterator();
                while (itSnomedInter.hasNext()) {
                  SnomedInter snomedInter = (SnomedInter) itSnomedInter.next();
                  out.println(" <TR> <TD> <b>" + elem.getAuiw() + " </b> </TD> ");
                  out.println(" <TD> <b>" + elem.getCode() + " </b> </TD>");
                  out.println(" <TD> <b>" + elem.getStr() + " </b> </TD> ");            
                  out.println(" <TD> <b>" + elem.getFstr() + " </b> </TD>");            
                  out.println(" <TD> <b>" + elem.getSoc() + " </b> </TD> ");            
                  out.println(" <TD> <b>" + elem.getSemtype() + " </b> </TD> ");            
                  //out.println(" <TD> <b>" + elem.getSrc() + " </b> </TD> </TR>"); 
                  out.println(" <TD> <b>" + elem.getSrc() + " </b> </TD>"); 
                  out.println(" <TD> <b>" + snomedInter.getAuis() + " </b> </TD>");            
                  out.println(" <TD> <b>" + snomedInter.getCui() + " </b> </TD></TR> ");               
                }
            }
            out.println("</TABLE>");
    Je me suis bien documenté, et la solution est de mettre l’annotation @ManyToOne dans l’entity d’association TermProj.java(wasnmi) pour faire le lien avec les deux entity TermSource.java(whoart) et SnomedInter.java(umlssnmi) ; et de mettre l’annotation @OneToMany dans ces deux derniers pour faire le lien avec TermProj.java
    Mais même pour cette solution j’ai une exception, c’est que dans ma table de jointure mes deux clés ne sont pas considérées comme clés étrangères mais sont plutôt les seules clés primaires de ma table « wasnmi »

    Voilà le problème est toujours pas résolu , toute suggestion sera la bien venu

Discussions similaires

  1. Comment bien déboguer son code ?
    Par D[r]eadLock dans le forum Débuter
    Réponses: 47
    Dernier message: 02/04/2024, 16h06
  2. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  3. Réponses: 4
    Dernier message: 23/10/2003, 08h03
  4. [mise en page] pour bien indenter son code
    Par bihorece dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/08/2003, 16h14
  5. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57

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