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 :

ManyToOne problem, null foreign key


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut ManyToOne problem, null foreign key
    Salut,
    J'ai exécuté cette requête EJB3.0 QL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT a FROM Airplane a JOIN FETCH a.airplaneDesignerId
    L'association entre l'entité AirplaneDesigner et Airplane est du type OneToMany (Un concepteur d'avion peut concevoir plusieurs avions et des avions de sont conçus par un créateur unique).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Airplane ------>AirplaneDesigner (Many to One) fetchType = LAZY
    Airplanedesigner ----------> Airplane (One to Many). fetchType = LAZY
    Le but de ma requête est de sélectionner le nom de l'avion avec le nom de son concepteur (AirplaneDesigner) pour des besoins d'affichage.
    Je travaille avec Toplink et GlassFish.
    La pièce jointe donne un apperçu du schéma relationnel que j'ai utilisé.
    Le résultat de cette requête est une liste d'objets Airplane avec l'attribut "Designation" qui n'est pas nulle, mais le champ de clé étrangère qui référence l'objet AirplaneDesigner est nulle!
    Je ne peux donc pas accéder au concepteur d'un avion donné.
    Quelqu'un peut-il m'aider s'il vous plaît?
    Merci à l'avance.
    Images attachées Images attachées  

  2. #2
    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,
    Peux tu montrer le code (java) des entités Airplane et AirplaneDesigner ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut
    Code entité Airplane:
    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package entities;
     
    import java.io.Serializable;
    import javax.persistence.Basic;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.Table;
     
    /**
     *
     * @author User
     */
    @Entity
    @Table(name = "airplane")
    @NamedQueries({@NamedQuery(name = "Airplane.findAll", query = "SELECT a FROM Airplane a"), @NamedQuery(name = "Airplane.findByAirplaneId", query = "SELECT a FROM Airplane a WHERE a.airplaneId = :airplaneId"), @NamedQuery(name = "Airplane.findByDesignation", query = "SELECT a FROM Airplane a WHERE a.designation = :designation"), @NamedQuery(name = "Airplane.findDetails", query = "SELECT a FROM Airplane a JOIN FETCH a.airplaneDesignerId")})
    public class Airplane implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Basic(optional = false)
        @Column(name = "airplane_id")
        private Integer airplaneId;
        @Basic(optional = false)
        @Column(name = "designation")
        private String designation;
        @JoinColumn(name = "airplane_designer_id", referencedColumnName = "airplane_designer_id")
        @ManyToOne(optional = false, fetch = FetchType.LAZY)
        private AirplaneDesigner airplaneDesignerId;
        @JoinColumn(name = "airplane_type_id", referencedColumnName = "airplane_type_id")
        @ManyToOne(optional = false, fetch = FetchType.LAZY)
        private AirplaneType airplaneTypeId;
     
        public Airplane() {
        }
     
        public Airplane(Integer airplaneId) {
            this.airplaneId = airplaneId;
        }
     
        public Airplane(Integer airplaneId, String designation) {
            this.airplaneId = airplaneId;
            this.designation = designation;
        }
     
        public Integer getAirplaneId() {
            return airplaneId;
        }
     
        public void setAirplaneId(Integer airplaneId) {
            this.airplaneId = airplaneId;
        }
     
        public String getDesignation() {
            return designation;
        }
     
        public void setDesignation(String designation) {
            this.designation = designation;
        }
     
        public AirplaneDesigner getAirplaneDesignerId() {
            return airplaneDesignerId;
        }
     
        public void setAirplaneDesignerId(AirplaneDesigner airplaneDesignerId) {
            this.airplaneDesignerId = airplaneDesignerId;
        }
     
        public AirplaneType getAirplaneTypeId() {
            return airplaneTypeId;
        }
     
        public void setAirplaneTypeId(AirplaneType airplaneTypeId) {
            this.airplaneTypeId = airplaneTypeId;
        }
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (airplaneId != null ? airplaneId.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 Airplane)) {
                return false;
            }
            Airplane other = (Airplane) object;
            if ((this.airplaneId == null && other.airplaneId != null) || (this.airplaneId != null && !this.airplaneId.equals(other.airplaneId))) {
                return false;
            }
            return true;
        }
     
        @Override
        public String toString() {
            return "entities.Airplane[airplaneId=" + airplaneId + "]";
        }
     
    }
    L'entité AirplaneDesigner:
    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package entities;
     
    import java.io.Serializable;
    import java.util.List;
    import javax.persistence.Basic;
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
     
    /**
     *
     * @author User
     */
    @Entity
    @Table(name = "airplane_designer")
    @NamedQueries({@NamedQuery(name = "AirplaneDesigner.findAll", query = "SELECT a FROM AirplaneDesigner a"), @NamedQuery(name = "AirplaneDesigner.findByAirplaneDesignerId", query = "SELECT a FROM AirplaneDesigner a WHERE a.airplaneDesignerId = :airplaneDesignerId"), @NamedQuery(name = "AirplaneDesigner.findByDesignerName", query = "SELECT a FROM AirplaneDesigner a WHERE a.designerName = :designerName")})
    public class AirplaneDesigner implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Basic(optional = false)
        @Column(name = "airplane_designer_id")
        private Integer airplaneDesignerId;
        @Column(name = "designer_name")
        private String designerName;
        @OneToMany(cascade = CascadeType.ALL, mappedBy = "airplaneDesignerId", fetch = FetchType.LAZY)
        private List<Airplane> airplaneCollection;
        @JoinColumn(name = "airplane_constructor_id", referencedColumnName = "airplane_constructor_id")
        @ManyToOne(optional = false, fetch = FetchType.LAZY)
        private AirplaneConstructor airplaneConstructorId;
     
        public AirplaneDesigner() {
        }
     
        public AirplaneDesigner(Integer airplaneDesignerId) {
            this.airplaneDesignerId = airplaneDesignerId;
        }
     
        public Integer getAirplaneDesignerId() {
            return airplaneDesignerId;
        }
     
        public void setAirplaneDesignerId(Integer airplaneDesignerId) {
            this.airplaneDesignerId = airplaneDesignerId;
        }
     
        public String getDesignerName() {
            return designerName;
        }
     
        public void setDesignerName(String designerName) {
            this.designerName = designerName;
        }
     
        public List<Airplane> getAirplaneCollection() {
            return airplaneCollection;
        }
     
        public void setAirplaneCollection(List<Airplane> airplaneCollection) {
            this.airplaneCollection = airplaneCollection;
        }
     
        public AirplaneConstructor getAirplaneConstructorId() {
            return airplaneConstructorId;
        }
     
        public void setAirplaneConstructorId(AirplaneConstructor airplaneConstructorId) {
            this.airplaneConstructorId = airplaneConstructorId;
        }
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (airplaneDesignerId != null ? airplaneDesignerId.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 AirplaneDesigner)) {
                return false;
            }
            AirplaneDesigner other = (AirplaneDesigner) object;
            if ((this.airplaneDesignerId == null && other.airplaneDesignerId != null) || (this.airplaneDesignerId != null && !this.airplaneDesignerId.equals(other.airplaneDesignerId))) {
                return false;
            }
            return true;
        }
     
        @Override
        public String toString() {
            return "entities.AirplaneDesigner[airplaneDesignerId=" + airplaneDesignerId + "]";
        }
     
    }
    Tu vois que les associations sont lazy.

  4. #4
    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
    Tu vois que les associations sont lazy
    Je ne vois pas ce que ça a comme rapport à ce cas ci, vu que tu forces un join explicitement.

    Citation Envoyé par Oceanys Voir le message
    Le résultat de cette requête est une liste d'objets Airplane avec l'attribut "Designation" qui n'est pas nulle, mais le champ de clé étrangère qui référence l'objet AirplaneDesigner est nulle!
    Quel champ "le champ de clé étrangère qui référence l'objet AirplaneDesigner est nulle" ? J'avais lu ton premier post rapidement, j'avais donc raté cette partie là.
    Tu dis que le champ AirPlaneDesinger est correctement resneigné, i lest où le problème alors ? et t'es pas censé parler de ou travailler directement sur les clés étrangères avec JPA.

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut
    Le problème mon ami est le suivant:
    Jattends un affichage de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [MiG35, MiKuyan Guirevic]
    [Mirage2000, Dassault]
    mais j'ai l'affichage suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [MiG35, null]
    [Mirage2000, null]
    Donc le JOIN FETCH n'a pas donné de résultats

Discussions similaires

  1. problem de foreign key
    Par Halloula dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2008, 16h21
  2. probleme ajout foreign key
    Par scarabe dans le forum SQL
    Réponses: 2
    Dernier message: 27/07/2007, 12h29
  3. probleme de foreign key
    Par DJERDJAR YACINE dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/07/2007, 21h36
  4. Newbie PgSQL->Probleme Creation de table avec FOREIGN KEY
    Par ralkif dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 07/03/2006, 21h59
  5. Probleme 'ALTER TABLE' et 'FOREIGN KEY'
    Par maahta dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/09/2003, 14h25

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