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

JSF Java Discussion :

Unsaved transient entity, Dependent entities, Non-nullable association(s)


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Par défaut Unsaved transient entity, Dependent entities, Non-nullable association(s)
    Bonjour a tous

    j'ai un problème avec la méthode créer un nouveau utilisateur qui y a un attribut d'autre classe (clé étrangère )

    voila erreur :

    Info: Hibernate: select compte0_.idCompte as idCompte1_3_, compte0_.username as username2_3_, compte0_.password as password3_3_, compte0_.role as role4_3_, compte0_.etat as etat5_3_, compte0_.profil as profil6_3_ from dbsalama.compte compte0_
    WARN: HHH000437: Attempting to save one or more entities that have a non-nullable association with an unsaved transient entity. The unsaved transient entity must be saved in an operation prior to saving these dependent entities.
    Unsaved transient entity: ([ma.salama.gs.model.Compte#0])
    Dependent entities: ([[ma.salama.gs.model.Directeur#<null>]])
    Non-nullable association(s): ([ma.salama.gs.model.Directeur.compte])
    Info: Hibernate: select directeur0_.idDirecteur as idDirect1_5_0_, compte1_.idCompte as idCompte1_3_1_, directeur0_.user as user2_5_0_, directeur0_.nom as nom3_5_0_, directeur0_.prenom as prenom4_5_0_, directeur0_.adresse as adresse5_5_0_, directeur0_.telephone as telephon6_5_0_, directeur0_.email as email7_5_0_, compte1_.username as username2_3_1_, compte1_.password as password3_3_1_, compte1_.role as role4_3_1_, compte1_.etat as etat5_3_1_, compte1_.profil as profil6_3_1_ from dbsalama.directeur directeur0_ left outer join dbsalama.compte compte1_ on directeur0_.user=compte1_.idCompte
    Info: Hibernate: select directeur0_.idDirecteur as idDirect1_5_0_, compte1_.idCompte as idCompte1_3_1_, directeur0_.user as user2_5_0_, directeur0_.nom as nom3_5_0_, directeur0_.prenom as prenom4_5_0_, directeur0_.adresse as adresse5_5_0_, directeur0_.telephone as telephon6_5_0_, directeur0_.email as email7_5_0_, compte1_.username as username2_3_1_, compte1_.password as password3_3_1_, compte1_.role as role4_3_1_, compte1_.etat as etat5_3_1_, compte1_.profil as profil6_3_1_ from dbsalama.directeur directeur0_ left outer join dbsalama.compte compte1_ on directeur0_.user=compte1_.idCompte
    voila la méthode créer :
    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
    @Override
        public boolean create(Directeur directeur) {
            boolean flag;
            Session session=HibernateUtil.getSessionFactory().openSession();
            Transaction tx = session.beginTransaction();
            try {
                session.save(directeur);
                tx.commit();
                flag = true;
            } catch (Exception e) {
                flag = false;
                tx.rollback();
            }
            return flag;
        }
    voila la classe Directeur.java

    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
    @Entity
    @Table(name="directeur"
        ,catalog="dbsalama"
    )
    public class Directeur  implements java.io.Serializable {
     
     
         private Integer idDirecteur;
         private Compte compte;
         private String nom;
         private String prenom;
         private String adresse;
         private String telephone;
         private String email;
     
        public Directeur() {
            this.compte = new Compte();
        }
    @ManyToOne(fetch=FetchType.LAZY)
        @JoinColumn(name="user", nullable=false)
        public Compte getCompte() {
            return this.compte;
        }
    j'ai trouvé dans le net qu'il faut faire sa
    dao.save(compte)
    dao.save(directeur)

    mais je ne sais pas comment faire sa pour ma situation

    merci d'avance

  2. #2
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Par défaut simplement
    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
    @Override
        public boolean create(Directeur directeur) {
            boolean flag;
            Session session=HibernateUtil.getSessionFactory().openSession();
            Transaction tx = session.beginTransaction();
            try {
                if(directeur.getCompte() == null){ //tu vérifie qu'il y a un compte
                     directeur.setCompte(new Compte); //sinon tu le créé
                }
                session.save(directeur.getCompte()) // tu sauvegarde le compte
                session.save(directeur);
                tx.commit();
                flag = true;
            } catch (Exception e) {
                flag = false;
                tx.rollback();
            }
            return flag;
        }

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Par défaut
    j'ai ajouter la condition IF et maintenant je vois autre erreur dans le console :

    Info: Hibernate: select compte0_.idCompte as idCompte1_3_, compte0_.username as username2_3_, compte0_.password as password3_3_, compte0_.role as role4_3_, compte0_.etat as etat5_3_, compte0_.profil as profil6_3_ from dbsalama.compte compte0_
    Info: Hibernate: insert into dbsalama.compte (username, password, role, etat, profil) values (?, ?, ?, ?, ?)
    WARN: SQL Error: 1048, SQLState: 23000
    ERROR: Column 'username' cannot be null
    Info: Hibernate: select directeur0_.idDirecteur as idDirect1_5_0_, compte1_.idCompte as idCompte1_3_1_, directeur0_.user as user2_5_0_, directeur0_.nom as nom3_5_0_, directeur0_.prenom as prenom4_5_0_, directeur0_.adresse as adresse5_5_0_, directeur0_.telephone as telephon6_5_0_, directeur0_.email as email7_5_0_, compte1_.username as username2_3_1_, compte1_.password as password3_3_1_, compte1_.role as role4_3_1_, compte1_.etat as etat5_3_1_, compte1_.profil as profil6_3_1_ from dbsalama.directeur directeur0_ left outer join dbsalama.compte compte1_ on directeur0_.user=compte1_.idCompte
    Info: Hibernate: select directeur0_.idDirecteur as idDirect1_5_0_, compte1_.idCompte as idCompte1_3_1_, directeur0_.user as user2_5_0_, directeur0_.nom as nom3_5_0_, directeur0_.prenom as prenom4_5_0_, directeur0_.adresse as adresse5_5_0_, directeur0_.telephone as telephon6_5_0_, directeur0_.email as email7_5_0_, compte1_.username as username2_3_1_, compte1_.password as password3_3_1_, compte1_.role as role4_3_1_, compte1_.etat as etat5_3_1_, compte1_.profil as profil6_3_1_ from dbsalama.directeur directeur0_ left outer join dbsalama.compte compte1_ on directeur0_.user=compte1_.idCompte

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Par défaut
    problème résolu j'ai changer les attributs de la table Compte a NULL et il marche bien merci

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 16
    Par défaut
    maintenant j'ai un autre problème, quand je veux créer un nouveau directeur et quand je sélectionner un utilisateur déjà existe pour un directeur il prend pas et il créer un nouveau compte :p

    voila image pour expliquer un peu le problème :

    Nom : 15-08-2015 16-07-10.jpg
Affichages : 2915
Taille : 175,6 Ko
    Nom : 15-08-2015 16-08-18.jpg
Affichages : 2898
Taille : 133,3 Ko

    merci d'avance !!

  6. #6
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Par défaut
    Du code html serait mille fois plus parlant qu'un image tu sais...

    Si tu as relu le code que je t'ai donné plus tôt, tu as du voir qu'il crée systématiquement un nouveau compte s'il n'y en pas. Tes deux soucis sont du à cela.

    D'abord, a ta place, je ne mettrait pas le username a null. Mieux vaudrait faire un constructeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         Compte(String username)
    histoire d'avoir un compte avec nom d'utilisateur...

    Ensuite, sur ta page, il faut que ton selectitems soit lié à quelque chose ... du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        <p:selectitems value="#{directeur.compte}">
    Histoire que la compte sélectionné soit affecté au directeur. Et en mettant un premier item a null pour pouvoir en créer un nouveau.

    Tu remarqueras au passage qu'aucun code n'est complet et copiable en l'état... Si tu as des questions après avoir essayé, n'hésite pas.

  7. #7
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    lors de la creation de Directeur, tu crees automatiquement un compte vide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Directeur() {
            this.compte = new Compte();
        }
    donc il faut enlever, et procéder par setter et getter.

    et dans la sauvegarde, il faut plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      if(directeur.getCompte() == null){ //tu vérifie qu'il y a un compte
                     directeur.setCompte(new Compte); //sinon tu le créé
                }
     
                session.save(directeur);
                tx.commit();
    Eric

Discussions similaires

  1. [WPF 4]Dependency Property non trouvée dans le designer
    Par MacReiben dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 25/08/2011, 10h30
  2. maven dependances reflexives non souhaitées
    Par javadevelopper dans le forum Maven
    Réponses: 1
    Dernier message: 08/04/2010, 16h10
  3. [AC-2003] Requête de non-concordance associée avec d'autres critères
    Par DuracellSubaquatique dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/09/2009, 11h44
  4. [SQL2005][SSIS] table de destination avec champ non nullable
    Par veridik dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/12/2007, 09h26
  5. probleme unsaved transient
    Par framus.class dans le forum Hibernate
    Réponses: 3
    Dernier message: 24/07/2007, 10h46

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