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

Développement Web en Java Discussion :

Problème lors d'un delete avec une relation one-to-many


Sujet :

Développement Web en Java

  1. #1
    En attente de confirmation mail
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 60
    Points
    60
    Par défaut Problème lors d'un delete avec une relation one-to-many
    bonjour,
    j'ai une relation entre 2 tables customer n--1 admin:un admin peut avoir plusieurs customer et un customer appartient a un seul admin.
    j'ai mappe l'association des deux cotes .lajout d'un customer fonctionne bien mais si je veux supprimer un admin (et bien sure les customer liee serons supprime) j'aurais une exception de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    could not delete collection: [tn.tucs.core.personnemanagement.Personneadmin.Customer#5]
    j'ai utilisé la parametre cascade="all" ,cascade="delte" et cascade="delete-orphin" mais ces toujour la meme erreur
    voila le fichier Customer.hbm.xml:
    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
    <?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 26 oct. 2011 11:58:48 by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <class name="tn.tucs.core.customermanagement.Customer" table="CUSTOMER">
            <id name="IdCustomer" type="int">
                <column name="IDCUSTOMER" />
                 <generator class="sequence">
                 <param name="sequence">seq_customer_id</param>
                </generator>
            </id>
     
            <property name="libelleCustomer" type="java.lang.String">
                <column name="LIBELLECUSTOMER" />
            </property>
            <property name="MatriculeFiscale" type="java.lang.String">
                <column name="matriculecustomer" />
            </property>
            <property name="FaxCustomer" type="java.lang.String">
                <column name="FAXCUSTOMER" />
            </property>
            <property name="TeleCustomer" type="java.lang.String">
                <column name="TELCUSTOMER" />
            </property>
            <property name="SiteWeb" type="java.lang.String">
                <column name="sitecustomer" />
            </property>
            <property name="AdresseCostumer" type="java.lang.String">
                <column name="adressecustomer" />
            </property>
            <property name="PaysCustomer" type="java.lang.String">
                <column name="PAYSCUSTOMER" />
            </property>
            <property name="VilleCustomer" type="java.lang.String">
                <column name="VILLECUSTOMER" />
            </property>
            <property name="EMailCustomer" type="java.lang.String">
                <column name="MAILCUSTOMER" />
            </property>
            <property name="MobileCustomer" type="java.lang.String">
                <column name="MOBILECUSTOMER" />
            </property>
     
           <many-to-one name="Admin" class="tn.tucs.core.personnemanagement.Personneadmin" column="IDADMIN" not-null="true" lazy="false"/> <!-- not-null="true" -->
     
       <!--   <set name="users" cascade="all-delete-orphan" >
                <key column="IDCUSTOMER" />
                <one-to-many class="tn.tucs.core.personnemanagement.Personneuser" />
            </set>-->
        </class>
    </hibernate-mapping>

    et le fichier Personneadmin.hbm.xml
    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
    <?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 26 oct. 2011 11:02:14 by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <class name="tn.tucs.core.personnemanagement.Personneadmin" table="PERSONNEADMIN">
            <id name="idadmin" >
                <column name="IDADMIN" />
                <generator class="sequence">
                <param name="sequence">seq_admin_id</param>
                </generator>
            </id>
            <property name="nomadmin" type="java.lang.String">
                <column name="NOMADMIN" />
            </property>
            <property name="prenomadmin" type="java.lang.String">
                <column name="PRENOMADMIN" />
            </property>
            <property name="cinadmin" type="java.lang.String">
                <column name="CINADMIN" />
            </property>
            <property name="teladmin" type="java.lang.String">
                <column name="TELADMIN" />
            </property>
            <property name="adresseadmin" type="java.lang.String">
                <column name="ADRESSEADMIN" />
            </property>
            <property name="cpadmin" >
                <column name="CPADMIN" />
            </property>
            <property name="villeadmin" type="java.lang.String">
                <column name="VILLEADMIN" />
            </property>
            <property name="paysadmin" type="java.lang.String">
                <column name="PAYSADMIN" />
            </property>
            <property name="loginadmin" type="java.lang.String">
                <column name="LOGINADMIN" />
            </property>
            <property name="pswadmin" type="java.lang.String">
                <column name="PSWADMIN" />
            </property>
     
             <set name ="Customer"  cascade="delete"  lazy="false">
                 <key column="IDADMIN" />
                 <one-to-many class="tn.tucs.core.customermanagement.Customer"/>
             </set>
     
     
     
        </class>
    </hibernate-mapping>
    la table customer:
    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
    -- Table: customer
     
    -- DROP TABLE customer;
     
    CREATE TABLE customer
    (
      idcustomer integer NOT NULL,
      libellecustomer character varying(100),
      matriculecustomer character varying(100),
      faxcustomer character varying(50),
      telcustomer character varying(50),
      sitecustomer character varying(200),
      payscustomer character varying(100),
      villecustomer character varying(100),
      mailcustomer character varying(150),
      mobilecustomer character varying(50),
      adressecustomer character varying(150),
      idadmin integer NOT NULL,
      CONSTRAINT "idCustomer" PRIMARY KEY (idcustomer),
      CONSTRAINT idadmin FOREIGN KEY (idadmin)
          REFERENCES personneadmin (idadmin) MATCH FULL
          ON UPDATE NO ACTION ON DELETE NO ACTION
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE customer OWNER TO postgres;
    et la table admin:
    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
    -- Table: personneadmin
     
    -- DROP TABLE personneadmin;
     
    CREATE TABLE personneadmin
    (
      idadmin bigint NOT NULL,
      nomadmin character varying(50),
      prenomadmin character varying(50),
      cinadmin character varying(50) NOT NULL,
      teladmin character varying(20),
      adresseadmin character varying(150),
      cpadmin bigint,
      villeadmin character varying(50),
      paysadmin character varying(50),
      loginadmin character varying(50),
      pswadmin character varying(50),
      CONSTRAINT idadmin PRIMARY KEY (idadmin),
      CONSTRAINT cin_unique UNIQUE (cinadmin),
      CONSTRAINT "login-unique" UNIQUE (loginadmin)
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE personneadmin OWNER TO postgres;
    je vous serais reconnaisant
    merci

  2. #2
    En attente de confirmation mail
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 60
    Points
    60
    Par défaut
    voila l'erreure avec plus de details:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Caused by: org.postgresql.util.PSQLException: ERREUR: une valeur NULL viole la contrainte NOT NULL de la colonne « idadmin »
    	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334)
    	at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:46)
    	at org.hibernate.persister.collection.AbstractCollectionPersister.remove(AbstractCollectionPersister.java:1070)
    	... 11 more
    et voila ce que sort hibernate:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Hibernate: select personnead0_.IDADMIN as IDADMIN3_0_, personnead0_.NOMADMIN as NOMADMIN3_0_, personnead0_.PRENOMADMIN as PRENOMAD3_3_0_, personnead0_.CINADMIN as CINADMIN3_0_, personnead0_.TELADMIN as TELADMIN3_0_, personnead0_.ADRESSEADMIN as ADRESSEA6_3_0_, personnead0_.CPADMIN as CPADMIN3_0_, personnead0_.VILLEADMIN as VILLEADMIN3_0_, personnead0_.PAYSADMIN as PAYSADMIN3_0_, personnead0_.LOGINADMIN as LOGINADMIN3_0_, personnead0_.PSWADMIN as PSWADMIN3_0_ from PERSONNEADMIN personnead0_ where personnead0_.IDADMIN=?
    Hibernate: select customer0_.IDADMIN as IDADMIN1_, customer0_.IDCUSTOMER as IDCUSTOMER1_, customer0_.IDCUSTOMER as IDCUSTOMER2_0_, customer0_.LIBELLECUSTOMER as LIBELLEC2_2_0_, customer0_.matriculecustomer as matricul3_2_0_, customer0_.FAXCUSTOMER as FAXCUSTO4_2_0_, customer0_.TELCUSTOMER as TELCUSTO5_2_0_, customer0_.sitecustomer as sitecust6_2_0_, customer0_.adressecustomer as adressec7_2_0_, customer0_.PAYSCUSTOMER as PAYSCUST8_2_0_, customer0_.VILLECUSTOMER as VILLECUS9_2_0_, customer0_.MAILCUSTOMER as MAILCUS10_2_0_, customer0_.MOBILECUSTOMER as MOBILEC11_2_0_, customer0_.IDADMIN as IDADMIN2_0_ from CUSTOMER customer0_ where customer0_.IDADMIN=?
    Hibernate: update CUSTOMER set IDADMIN=null where IDADMIN=?
    et voila la fonction delete

    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
    public boolean deleteAdmin(int idAdmin)
    {
    Session session = HibernateUtil.currentSession();
    Transaction tx = session.beginTransaction();
    Personneadmin p = (Personneadmin)session.load(Personneadmin.class,new Integer (idAdmin));
    try {
    	session.delete(p);
    	tx.commit();
    	HibernateUtil.closeSession();
    	return true;
    } catch (Exception e) {
    	System.out.println("Erreur lors de la  suppression d'admin ");
    	return false;
    }
    }

  3. #3
    En attente de confirmation mail
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 60
    Points
    60
    Par défaut
    bon merci pour vos reponse.
    la solution,si ça va aider qq'un autre, est d'ajouter
    pour le mapping de set dans Personneadmin.hbm.xml

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

Discussions similaires

  1. Comment récupérer une liste avec une relation one to many ?
    Par tomlaurent dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/11/2011, 07h16
  2. [Mapping] Problème avec la relation one-to-many
    Par nadhir84 dans le forum Hibernate
    Réponses: 4
    Dernier message: 16/08/2011, 15h32
  3. Réponses: 30
    Dernier message: 17/05/2011, 12h25
  4. Réponses: 4
    Dernier message: 18/06/2007, 08h30
  5. Problème de tri avec une relation de type n-n
    Par toutoune60 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/06/2007, 10h52

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