Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec clé primaire composite(JPA)

JAVA EE

    7 février 2017 à 20:57:46

    Bonjour j'ai un message d'erreur lorsque je veux lire la clé primaire composée de ma table personne, voici le message  : 
    /personne.xhtml: The class 'model.TPersonnePK' does not have the property 'tPersonneNom'.



    Cependant la propriété tPersonneNom existe bien dans ma classe TPersonne PK;
    Pouriez-vous m'aider à résoudre ce problèlme s'il vous plait ! 

    Merci d'avance.
    Ci dessous les différents bouts de codes : 

    TPersonneFK

    package model; 
      
    import java.io.Serializable; 
    import javax.persistence.*; 
      
    /** 
     * The primary key class for the t_personne database table. 
     * 
     */ 
    @Embeddable 
    public class TPersonnePK implements Serializable { 
                   //default serial version id, required for serializable classes. 
                   private static final long serialVersionUID = 1L; 
      
                   @Column(name="t_personne_nom") 
                   private String tPersonneNom; 
      
                   @Column(name="t_personne_prenom") 
                   private String tPersonnePrenom; 
      
                   public TPersonnePK() { 
                   } 
                   
                   public TPersonnePK(String nom, String prenom) 
                   { 
                                  this.tPersonneNom = nom ; 
                                  this.tPersonnePrenom = prenom ; 
                   } 
                   
                   public String getTPersonneNom() { 
                                  return this.tPersonneNom; 
                   } 
                   public void setTPersonneNom(String tPersonneNom) { 
                                  this.tPersonneNom = tPersonneNom; 
                   } 
                   public String getTPersonnePrenom() { 
                                  return this.tPersonnePrenom; 
                   } 
                   public void setTPersonnePrenom(String tPersonnePrenom) { 
                                  this.tPersonnePrenom = tPersonnePrenom; 
                   } 
      
                   public boolean equals(Object other) { 
                                  if (this == other) { 
                                                return true; 
                                  } 
                                  if (!(other instanceof TPersonnePK)) { 
                                                return false; 
                                  } 
                                  TPersonnePK castOther = (TPersonnePK)other; 
                                  return 
                                                this.tPersonneNom.equals(castOther.tPersonneNom) 
                                                && this.tPersonnePrenom.equals(castOther.tPersonnePrenom); 
                   } 
      
                   public int hashCode() { 
                                  final int prime = 31; 
                                  int hash = 17; 
                                  hash = hash * prime + this.tPersonneNom.hashCode(); 
                                  hash = hash * prime + this.tPersonnePrenom.hashCode(); 
                                  
                                  return hash; 
                   } 
    }

     

    TPersonne

    package model; 
      
    import java.io.Serializable; 
    import javax.persistence.*; 
    import java.util.Date; 
    import java.util.List; 
      
      
    /** 
     * The persistent class for the t_personne database table. 
     * 
     */ 
    @Entity 
    @Table(name="t_personne") 
    @NamedQuery(name="TPersonne.findAll", query="SELECT t FROM TPersonne t") 
    public class TPersonne implements Serializable { 
                   private static final long serialVersionUID = 1L; 
      
                   @EmbeddedId 
                   private TPersonnePK id; 
      
                   @Temporal(TemporalType.TIMESTAMP) 
                   private Date t_personne_dateNaissance; 
      
                   private byte t_personne_isActif; 
      
                   //bi-directional many-to-one association to TVehicule 
                   @OneToMany(mappedBy="TPersonne") 
                   private List<TVehicule> TVehicules; 
      
                   public TPersonne() { 
                   } 
                   
                   public TPersonne(String nom, String prenom) 
                   { 
                                  this.id = new TPersonnePK(nom, prenom) ; 
                   } 
      
                   public TPersonnePK getId() { 
                                  return this.id; 
                   } 
      
                   public void setId(TPersonnePK id) { 
                                  this.id = id; 
                   } 
      
                   public Date getT_personne_dateNaissance() { 
                                  return this.t_personne_dateNaissance; 
                   } 
      
                   public void setT_personne_dateNaissance(Date t_personne_dateNaissance) { 
                                  this.t_personne_dateNaissance = t_personne_dateNaissance; 
                   } 
      
                   public byte getT_personne_isActif() { 
                                  return this.t_personne_isActif; 
                   } 
      
                   public void setT_personne_isActif(byte t_personne_isActif) { 
                                  this.t_personne_isActif = t_personne_isActif; 
                   } 
      
                   public List<TVehicule> getTVehicules() { 
                                  return this.TVehicules; 
                   } 
      
                   public void setTVehicules(List<TVehicule> TVehicules) { 
                                  this.TVehicules = TVehicules; 
                   } 
      
                   public TVehicule addTVehicule(TVehicule TVehicule) { 
                                  getTVehicules().add(TVehicule); 
                                  TVehicule.setTPersonne(this); 
      
                                  return TVehicule; 
                   } 
      
                   public TVehicule removeTVehicule(TVehicule TVehicule) { 
                                  getTVehicules().remove(TVehicule); 
                                  TVehicule.setTPersonne(null); 
      
                                  return TVehicule; 
                   } 
      
    } 
    

     

    personne.xhtml (facelet)
     
    <!DOCTYPEhtml> 
    <html lang="fr" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head> 
    <title>Liste des utilisateurs</title> 
    </h:head> 
    <h:body> 
      
      
    Saisie d'une nouvelle personne : 
                   <h:form> 
                                  <h:outputLabel value="Nom  : "/> 
                                  <h:inputText value="#{personneBacking.nom}" /><br/> 
                                  
                                  <h:outputLabel value="Prenom : "/> 
                                  <h:inputText value="#{personneBacking.prenom}" /><br/> 
                                  
                                  <h:commandButton value="Nouvelle information" action="#{personneBacking.creationPersonne}"/><br/> 
                   </h:form> 
                   <br/><br/>Liste des personnes : 
                                  <h:dataTable value="#{personneBacking.listePersonne}" var="pers" 
                                                 headerClass="order-table-header" 
                                                rowClasses="order-table-odd-row,order-table-even-row"> 
                       <h:column> 
                                  <f:facet name="header">Nom : </f:facet> 
                                                 #{pers.id.tPersonneNom} 
                   </h:column> 
                   
                   <h:column> 
                                  <f:facet name="header">Prenom : </f:facet> 
                                                 #{pers.id.tPersonnePrenom} 
                   </h:column> 
                   
                   <h:column> 
                                  <f:facet name="header">Date de naissance</f:facet> 
                                                 #{pers.t_personne_dateNaissance} 
                   </h:column> 
                   </h:dataTable> 
    </h:body> 
    </html> 
     

     

    personneBacking (le backing bean)

    package backinBeans; 
      
    import java.util.List; 
      
    import javax.ejb.EJB; 
    import javax.faces.bean.RequestScoped; 
      
    import DAO.personneDAO; 
    import model.TPersonne; 
      
    @javax.faces.bean.ManagedBean 
    @RequestScoped 
    public class personneBacking { 
      
                // Variables listes 
                List<TPersonne> listePersonne ; 
                
                // Variable récupération des valeurs sélectionnées. (création d'une personne) 
                String nom ; 
                String Prenom ; 
                
                // Injection EJB 
                @EJB 
                personneDAO persDAO = new personneDAO() ; 
                
                public void creationPersonne() 
                { 
                            persDAO.creerPersonne(nom, Prenom); 
                } 
                
                
                
      
      
                /////// ACCESSEURS 
      
                
                public void setListePersonne(List<TPersonne> listePersonne) { 
                            this.listePersonne = listePersonne; 
                } 
      
      
      
      
      
                public String getNom() { 
                            return nom; 
                } 
      
      
                public List<TPersonne> getListePersonne() { 
                            System.out.println("Passage dans getListePersonne") ; 
                            List<TPersonne> listePersonne        ; 
                            listePersonne = persDAO.findAll() ; 
                            return listePersonne; 
                } 
      
      
      
      
      
                public void setNom(String nom) { 
                            this.nom = nom; 
                } 
      
      
                public String getPrenom() { 
                            return Prenom; 
                } 
      
      
                public void setPrenom(String prenom) { 
                            Prenom = prenom; 
                } 
                
    }
    


    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2017 à 20:30:57

      J'ai dit une connerie ...

      -
      Edité par FenixJack 8 février 2017 à 20:40:07

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        9 février 2017 à 8:32:24

        Bonjour,

        Si je comprends bien (c'est le matin ^^ ), il cherche tPersonneNom.

        Or, tu l'as référencé comme @Column(name="t_personne_nom") ;)

        • Partager sur Facebook
        • Partager sur Twitter
          9 février 2017 à 10:34:23

          JohnSpawn a écrit:

          Bonjour,

          Si je comprends bien (c'est le matin ^^ ), il cherche tPersonneNom.

          Or, tu l'as référencé comme @Column(name="t_personne_nom") ;)


          Nope, le @Column(name) sert à indiqué le nom de colonne en base et il tente d'accéder à la classe donc le nom de la propriété est bonne;

          Sinon pose un point d'arrêt pour vérifier que ton id est bien initialisé et surtout vérifie que tu n'a pas d’erreur sur ton programme (si tu utilise maven, un petit maven install) et du coup que tu publie bien les modifications sur ton serveur.

          • Partager sur Facebook
          • Partager sur Twitter
            10 février 2017 à 15:18:01

            Bonjour,  pour commencer merci de vos réponses.

            Mon problème n'est toujours pas résolut et après plusieurs vérifications je ne trouve toujours pas le soucis.

            Voilà ce que j'ai tenté : 

            * Mettre un point d'arret dans ma fonction findall afin de vérifier si il m'importe bien toutes les informations. C'est le cas et l'id correspond bien TPersonnePK (id=1123).

            Donc est-ce que j'ai mal déclaré quelque chose dans le xhtml ou autre car je suis complètement bloqué je ne sais plus comment avancer.

            • Partager sur Facebook
            • Partager sur Twitter
              10 février 2017 à 16:16:06

              Hello, 

              Essaie d'éclater ton EmbeddedId en un simple Embedded puis un Id dans ta classe Tpersonne.

              J'ai fait quelque chose de semblable il y a peu. J'espère que cela pourra résoudre ton problème.

              @Entity
              @Table(name="PRINCIPAL")
              public class Principal{
                  @Id
                  @Column(name = "ID", unique = true, nullable = false)
                  @GenericGenerator(name = "PrincipalGenerator", strategy = "increment")
                  @GeneratedValue(generator = "PrincipalGenerator")
                  private Long id;
                  @Embedded
                  private PrincipalId principalId;
              
                  public Menu getMenu(){
                      return this.principalId.getMenu();
                  }
              
              @Embeddable
              public class PrincipalId implements Serializable{
              
              @ManyToOne(optional=false)
              @JoinColumn(name="MENU_ID)
              private Menu menu;
              // etc.. 
              }

              PS : J'ai réécris les noms par rapport à ma classe qui marchait mais l'idée est là.

              • Partager sur Facebook
              • Partager sur Twitter
                20 février 2017 à 21:53:15

                Bonjour je n'arrive pas a adapter le code au miens.
                • Partager sur Facebook
                • Partager sur Twitter
                  21 mars 2017 à 23:49:53

                  personne pour m'aider ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 mars 2017 à 9:02:30

                    Créer ton propre sujet, pour que l'on puisse t'aider plus facilement et montre nous ton code et explique le problème que tu rencontre.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 mars 2017 à 23:23:03

                      Bonjour Florent m je suis le créateur du sujet et toutjours avec le même problème ^^
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 mars 2017 à 8:57:16

                        Oups, désoler habitude ^^'

                        Tu peu éssayer de remplacer:

                          @Column(name="t_personne_nom")
                          private String tPersonneNom;
                           
                          @Column(name="t_personne_prenom")
                          private String tPersonnePrenom;


                        Par :

                        private String t_personne_nom;
                           
                        private String t_personne_prenom;

                        Juste pour voir si tu a toujours l'erreur, c'est pas censé mieux fonctionner, mais bon...

                        Essaye sinon de passer par un IdClass:

                        http://www.thejavageek.com/2014/05/01/jpa-idclass-example/

                        -
                        Edité par florent m 24 mars 2017 à 9:01:50

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Problème avec clé primaire composite(JPA)

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown