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

Hibernate Java Discussion :

[SPRING][HIBERNATE][MYSQL] insert et valeur des champs.


Sujet :

Hibernate Java

  1. #1
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut [SPRING][HIBERNATE][MYSQL] insert et valeur des champs.
    Bonjour, je fais une appli struts, spring, hibernate, mysql et lorsque je crée un objet qu'hibernate va insérer en base, j'ai une erreur si je ne rempli pas tous les paramètres de mon objet.

    Je m'explique : j'ai un objet voiture qui a comme paramètres un id, un nom, un modele, une annee, un kilométrage et un responsable.
    En base j'ai donc voiture(voi_id,voi_nom,voi_modele,voi_annee,voi_kilometrage,res_id).

    Mon fichier de mapping :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <hibernate-mapping>
            <class name="fr.gestentrep2.voitures.pojos.Voiture" table="T_VOI_VOITURE">
                <id name="id" column="voi_id" type="int"><generator class="increment"/></id>
                <property name="nom" column="voi_nom" type="string"/>
                <property name="modele" column="voi_modele" type="string"/>
                <property name="annee" column="voi_annee" type="int"/>
                <property name="kilometrage" column="voi_kilometrage" type="long"/>
                <property name="responsableId" column="res_id" type="int"/>
            </class>
    </hibernate-mapping>
    Lorsque je fais dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            Session session = sessionFactory.getCurrentSession();
            Voiture theVoiture = new Voiture();
            theVoiture.setNom(nom);
            theVoiture.setModele(modele);
            theVoiture.setAnnee(Integer.parseInt(annee));
            theVoiture.setKilometrage(Long.parseLong(kilometrage));
            session.save(theVoiture);
    j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.servlet.ServletException: Hibernate operation: Could not execute JDBC batch update; uncategorized SQLException for SQL [insert into T_VOI_VOITURE (voi_nom, voi_modele, voi_annee, voi_kilometrage, res_id, voi_id) values (?, ?, ?, ?, ?, ?)]; SQL state [S1009]; error code [0]; Statement parameter 5 not set.; nested exception is java.sql.BatchUpdateException: Statement parameter 5 not set.
    Apparemment il ne veux pas créer l'objet en base car il manque le 5ième paramètre qui est le responsable (res_id).

    Mais moi je veux quand même créer mon objet avec un res_id vide.

    Comment faire?

    ps: je précise que sans spring l'insert se fait correctement et res_id est vide.
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    et ton bean Voiture il ressemble à quoi ?

  3. #3
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut
    Mon bean dont se sert l'action du formulaire :
    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
     
    public class FormulaireCreationVoitureBean extends ActionForm {
        private String nom = null;
        private String modele = null;
        private String annee = null;
        private String kilometrage = null;
     
        public String getNom() {
            return nom;
        }
        public String getModele() {
            return modele;
        }
        public String getAnnee() {
            return annee;
        }
        public String getKilometrage() {
            return kilometrage;
        }
     
        public void setNom(String nom) {
            this.nom = nom;
        }
        public void setModele(String modele) {
            this.modele = modele;
        }
        public void setAnnee(String annee) {
            this.annee = annee;
        }
        public void setKilometrage(String kilometrage) {
            this.kilometrage = kilometrage;
        }
     
        public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
            ActionErrors erreurs = new ActionErrors();
            if (nom == null || nom.trim().equals("")) {
                erreurs.add("nomvide", new ActionMessage("voiture.formulaire.nom.vide"));
            }
            if (modele == null || modele.trim().equals("")) {
                erreurs.add("modelevide", new ActionMessage("voiture.formulaire.modele.vide"));
            }
            if (annee == null || annee.trim().equals("")) {
                erreurs.add("anneevide", new ActionMessage("voiture.formulaire.annee.vide"));
            } else {
                if (!annee.matches("^\\s*\\d+\\s*$")) {
                    erreurs.add("anneeincorrect", new ActionMessage("voiture.formulaire.annee.incorrect", annee));
                }
            }
            if (kilometrage == null || kilometrage.trim().equals("")) {
                erreurs.add("kilometragevide", new ActionMessage("voiture.formulaire.kilometrage.vide"));
            } else {
                if (!kilometrage.matches("^\\s*\\d+\\s*$")) {
                    erreurs.add("kilometrageincorrect", new ActionMessage("voiture.formulaire.kilometrage.incorrect", annee));
                }
            }
            return erreurs;
        }
    }
    --> Il n'y a pas le responsable mais normal, il n'est pas setté dans ce formulaire.

    Lorsque je fais Voiture theVoiture = new Voiture ...... j'utilise le POJO Voiture suivant :
    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
     
    public class Voiture {
        public int id ;
        private String nom;
        private String modele;
        private int annee;
        private long kilometrage;
        private long responsableId;
    //    private Set utilisationVoiture = new HashSet();
    //    private Set entretients = new HashSet();
     
     
        /********************************************************************************
        * Constructeurs 
        ********************************************************************************/
        public Voiture() {
     
        }
        public Voiture(String nom, String modele, int annee, long kilometrage,long responsableId) {
            this.nom = nom;
            this.modele = modele;
            this.annee = annee;
            this.kilometrage = kilometrage;
            this.responsableId = responsableId;
        }
     
        /********************************************************************************
        * Méthodes Get 
        ********************************************************************************/
        public int getId() {
            return id;
        }
        public String getNom() {
            return nom;
        }
        public String getModele() {
            return modele;
        }
        public int getAnnee() {
            return annee;
        }
        public long getKilometrage() {
            return kilometrage;
        }
        public long getResponsableId() {
            return responsableId;
        }
    /*    public Set getUtilisationVoiture() {
            return utilisationVoiture;
        }
        public Set getEntretients() {
            return entretients;
        }
    */
        /********************************************************************************
        * Méthodes Set 
        ********************************************************************************/
        public void setId(int i) {
            id = i ;
        }
        public void setNom(String s) {
            this.nom = s;
        }
        public void setModele(String s) {
            this.modele = s;
        }
        public void setAnnee(int i) {
            this.annee = i;
        }
        public void setKilometrage(long l) {
            this.kilometrage = l;
        }
        public void setResponsableId(long l) {
            this.responsableId = l;
        }
    /*    public void setUtilisationVoiture(Set s) {
            this.utilisationVoiture = s;
        }
        public void setEntretients(Set s) {
            this.entretients = s;
        }
      */  
        /********************************************************************************
        * Méthodes d'affichages
        ********************************************************************************/
        public String toString() {
            return("\n\n\n----------------------------------------\n Nom: " + nom + " \n Modèle : " + modele + " \nAnnée : " + annee +  " \n Kilométrage : " + kilometrage +  " \n Responsable : " + responsableId + "\n----------------------------------------");
        }
     
    }
    Une idée?
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




  4. #4
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut
    En fait autant pour moi : rien à voir.

    J'ai mappé le responsable en int dans mon fichier de mapping et en long dans mon POJO. C'est çà qui le perturbait.

    Par contre, maintenant l'insert est bien réalisé mais res_id = 0 alors que je voudrais qu'il soit NULL.
    Et bien sur dans mon code int responsable = null; ca compile pas.

    Comment puis-je faire?
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    normal avec le type primitif int, il te faut un Integer

  6. #6
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut
    oui mais dans ma base mysql, le champs res_id créé est par défaut null et j'aimerais bien qu'il le reste.
    C'est possible?
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




  7. #7
    Invité
    Invité(e)
    Par défaut
    Salut
    voila ce que je pense il faut que tu change un truc dans ton fichier de mapping genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <hibernate-mapping>
            <class name="fr.gestentrep2.voitures.pojos.Voiture" table="T_VOI_VOITURE">
                <id name="id" column="voi_id" type="int"><generator class="increment"/></id>
                <property name="nom" column="voi_nom" type="string"/>
                <property name="modele" column="voi_modele" type="string"/>
                <property name="annee" column="voi_annee" type="int"/>
                <property name="kilometrage" column="voi_kilometrage" type="long"/>
                <property name="responsableId" column="res_id" type="int" not-null="false"/>
            </class>
    </hibernate-mapping>
    donc c le not-null="false" qu'il faut ajouter pour que le
    responsableId recois le null teste ca t'a rien a perdre

  8. #8
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut
    J'ai testé mais ca donne toujours le même résultat.
    Le problème c'est dans mon POJO Voiture que j'utilise pour insérer l'objet en base quand je déclare:
    private int responsableId;
    il doit automatiquement l'initialiser à 0 et le mettre lors du session.save(theVoiture);

    Il faudrait que je puisse arriver à lui dire private int reponsableId = null; (évidemment çà ne marche pas mais c'est le seul moyen je pense qu'en base il me mette res_id = null).

    Merci quand même
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par nikalkal
    J'ai testé mais ca donne toujours le même résultat.
    Le problème c'est dans mon POJO Voiture que j'utilise pour insérer l'objet en base quand je déclare:
    private int responsableId;
    il doit automatiquement l'initialiser à 0 et le mettre lors du session.save(theVoiture);

    Il faudrait que je puisse arriver à lui dire private int reponsableId = null; (évidemment çà ne marche pas mais c'est le seul moyen je pense qu'en base il me mette res_id = null).

    Merci quand même
    pourquoi ne pas te déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Integer responsableId;
    de cette manière il sera automatiquement initialisé à null?

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  10. #10
    Membre habitué Avatar de nikalkal
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 231
    Points : 166
    Points
    166
    Par défaut
    Et bein la voila ma solution.
    Effectivement ça marche.
    J'y avait pas pensé.

    Merci pour ton aide à bientot.
    -> L’amour est à la portée de tous, mais l’amitié est l’épreuve du cœur
    -> La nature nous a donné deux oreilles et seulement une langue afin de pouvoir écouter d'avantage et parler moins
    -> Trois sortes de gens disent la vérité : les sots, les enfants et les ivrognes




+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/02/2008, 21h47
  2. Récupérer les valeurs des champs créés dynamiquement
    Par outlawz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/05/2006, 16h32
  3. [Hibernate] Comment ramener les valeurs des tables de ref ?
    Par PamelaGeek dans le forum Hibernate
    Réponses: 9
    Dernier message: 07/02/2006, 23h52
  4. [STRUTS] Valeur des Champs disable s'efface lors d'actions
    Par cosmos38240 dans le forum Struts 1
    Réponses: 5
    Dernier message: 24/11/2005, 16h20
  5. [servlet][tester la valeur des champs récupérés]
    Par maya5 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/05/2004, 10h06

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