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 :

Problème insertion d'une liste dans un objet [Core]


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Par défaut Problème insertion d'une liste dans un objet
    Bonjour,

    j'ai un objet Client qui contient une liste d'adresse mail, lors de creation de mon client, je veux qu'il m'insert sa liste d'adresse mail, sachant que l'identificateur client est généré automatiquement dans ma base (MySql), j'ai toujours l'erreur suivant : client_id (de la table adresse mail) ne peut etre null !!!

    normalement, c'est hibernate qui gere ca ? d'autant que je ne connais pas l'identifiant de mon client jusqu'a son insertion en base.

    voila le code que j'ai
    1- mapping client

    <?xml version="1.0"?>
    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
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping package="fr.icdc.dei.erel.metier.entite.impl">
    	<class name="ClientImpl" table="TA_CLIENT">
    		<id
    			column="CLIENT_ID"
    			name="clientID"
    			type="integer"
    		>
    			<generator class="native" />
    		</id>
    			..... (autre proorièté) 
     
    		<set name="ListAdresseMail" cascade="all" lazy="true"  >
    			<key column="CLIENT_ID"/>
    			<one-to-many class="AdresseMailImpl"/>
    		</set> 
     
     
     
    	</class>
    </hibernate-mapping>

    Mapping adresse mail :
    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 3 sept. 2012 11:56:49 by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <class name="fr.icdc.dei.erel.metier.entite.impl.AdresseMailImpl" table="TA_ADRESSE_MAIL" >
            <id name="adresseMailId" type="java.lang.Integer">
                <column name="ADRESSE_MAIL_ID" />
                <generator class="native" />
            </id>
     
            <property name="adresse" type="string">
                <column name="ADRESSE" not-null="true" />
            </property>
            <property name="principale" type="boolean">
                <column name="PRINCIPALE" not-null="true" />
            </property>
     
             <property name="clientID" type="integer" >
                <column name="CLIENT_ID"  />
            </property>
     
        </class>
    </hibernate-mapping>
    classe Client

    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
     
    public  class ClientImpl  implements Serializable, ObjectEntite {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private int hashCod = Integer.MIN_VALUE;
     
    	// primary key
    	private java.lang.Integer clientID;
     
    	// fields
     
     
    	private Set<AdresseMailImpl> listAdresseMail;
     
     
     
    	// constructors
    	public ClientImpl () {
     
    	}
       **** la  suite getter and setter
     
     
    }
    classe adresse mail

    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
     
    public class AdresseMailImpl implements java.io.Serializable {
     
    	private Integer adresseMailId;
    	private Integer clientID;
    	private String adresse;
    	private boolean principale;
     
     
     
    	public AdresseMailImpl() {
    	}
     
    	**** suite getter and setter
     
     
    }
    et voila l'erreur que j'ai lorsque j'appel create(client);

    Hibernate: insert into TA_CLIENT (DECLARATION_LIGNE, DATE_BASCULE_DECLARATION_LIGNE, LA, DATE_MAJ, LEP, FRANCS_PACIFIQUE, UTILISATEUR_MAJ, CDC_FIDELIA, LBOPT, RIDET, DATE_CLOTURE, ENVOI_COURRIERS, LDD, LAOPT, RAISON_SOCIALE, STATUT_CLIENT_ID, TIERS_ID, TYPE_RESEAU_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into TA_ADRESSE_MAIL (ADRESSE, PRINCIPALE, CLIENT_ID) values (?, ?, ?)
    - [26/09/2012 15:17:32] ERROR org.hibernate.util.JDBCExceptionReporter - Column 'CLIENT_ID' cannot be null
    - [26/09/2012 15:17:32] ERROR org.hibernate.util.JDBCExceptionReporter - Column 'CLIENT_ID' cannot be null
    - [26/09/2012 15:17:32] ERROR fr.icdc.dei.erel.persistance.service.impl.hibernate.ClientHibernatePersistenceServiceImpl - [UID:14D3BE5D22DC2B60D1970AE037A57821] Erreur lors de l'execution de la méthode insertClient[EXID:31680683-713.7677276127041]
    fr.icdc.dei.fwk.connection.ConnectionException: erreur lors de l'execution de la méthode create



    avez vous une idée svp ???

    Merci par avance

  2. #2
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    il te manque dans ton mapping l'association client_id dans adresse -> client

    ce qui fait que quand hibernate essaye de sauver ton adresse, il ne sait pas quelle valeur donner à ta colonne, du coup il tente de sauver null... ce que n'aime pas mysql à cause de la contrainte de clé étrangère d'où l'erreur.

    essaye de modifier ton fichier de mapping d'adresse en conséquence, quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <many-to-one name="Client" class="ClientImpl" fetch="select">
       <column name="CLIENT_ID" />
    </many-to-one>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Par défaut
    Merci pour ta réponse,

    au fait, dans la classe AdresseMail, je n'ai pas mappé tout l'objet mais seulement l'idclient (comme attribut)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <property name="clientID" type="integer" >
                <column name="CLIENT_ID"  />
     </property>
    ca fait la meme erreur si je mappe l'objet client a la place de l'attribut clientID

  4. #4
    Membre émérite Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Par défaut
    peux-tu montrer tes 2 fichiers de mapping après les modifications que je t'ai demandé ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Par défaut
    mapping client

    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
    <hibernate-mapping package="entite.impl">
    	<class name="ClientImpl" table="TA_CLIENT">
    		<id
    			column="CLIENT_ID"
    			name="clientID"
    			type="integer"
    		>
    			<generator class="native" />
    		</id>
     
     
     
    		<set name="ListAdresseMail" cascade="all" lazy="true"  >
    			<key column="CLIENT_ID"/>
    			<one-to-many class="AdresseMailImpl"/>
    		</set> 
     
     
     
    	</class>
    </hibernate-mapping>


    mapping adresse mail
    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
    <hibernate-mapping>
        <class name="entite.impl.AdresseMailImpl" table="TA_ADRESSE_MAIL" >
            <id name="adresseMailId" type="java.lang.Integer">
                <column name="ADRESSE_MAIL_ID" />
                <generator class="native" />
            </id>
     
            <property name="adresse" type="string">
                <column name="ADRESSE" not-null="true" />
            </property>
            <property name="principale" type="boolean">
                <column name="PRINCIPALE" not-null="true" />
            </property>
     
            <many-to-one name="clientImpl" class="entite.impl.ClientImpl" fetch="select">
    	   	<column name="CLIENT_ID" />
    		</many-to-one>
     
             </class>
    </hibernate-mapping>

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Par défaut
    Bonjour,

    Je reviens vers vous pour le problème d'hier, j'ai reussi à le résoudre, au fait, il fallait juste inserer le client qu'on vient de créer dans l'objet adresse mail meme si le client n'a pas encore d'id.

    Voila ce qu'il fallait faire

    Client client = new Client()
    Set<Adress> listAdress = new HashSet<Adress>()

    Pour chaque element adress de listAdress :
    adress.SetClient(client)

    client.setAdress(adress)

    apres il suffit de mettre create(client) et le hibernate prend en charge aussi bien la creation du client et celle d'adress.

    En tt cas merci pour votre aide .

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

Discussions similaires

  1. recuperer la valeur d'une liste dans un objet moose
    Par vidici dans le forum Langage
    Réponses: 8
    Dernier message: 29/09/2014, 16h00
  2. [XL-2010] Problème insertion depuis une textbox dans une cellule
    Par Phifou dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/09/2014, 10h50
  3. [Débutant] Problème Insertion d'une date dans une base de donnée
    Par quiet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 20/06/2014, 11h45
  4. Réponses: 2
    Dernier message: 14/12/2010, 12h22
  5. Probléme pour charger une List dans un s:select
    Par Elthriel dans le forum Struts 2
    Réponses: 10
    Dernier message: 17/07/2008, 11h21

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