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 :

Delete dans une table de jointure


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
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut Delete dans une table de jointure
    Bonjour à tous ,


    J'ai un petit problème avec mon fichier de mapping. La situation est la suivante :

    Je possède 3 tables : Expense , PartialNote , NoteExpense.

    NoteExpense possède une collection d'Expense , pour cela , la table de jointure PartialNote rentre en jeu

    Lorsque j'ajoute des expenses à une note , et que je sauvegarde cette note , pas de problèmes , tout s'insère bien dans la base de données. Mais quand je supprime une note , il me delete bien dans la table Expense toutes les expenses de la note par contre , la table PartialNote contient toujours les références vers NoteExpense et Expense.

    Je vous donne les fichiers de mapping d'expense et noteExpense :

    Expense :

    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
      <class name="model.classes.Expense" table="EXPENSE" catalog="GestionConge">
      	<id name="idExpense" type="short">
                <column name="IDExpense"/>
                <generator class="increment" />
        </id>
            <property name="nature" type="string">
                <column name="Nature" not-null="true" />
            </property>
            <property name="date" type="date">
                <column name="Date" not-null="true" />
            </property>
                <property name="amount" type="short">
                <column name="Amount" not-null="true" />
            </property>
            <join table="OCCUPATIONEXPENSE" 
            inverse="true" 
            optional="true">
            <key column="idExpense" on-delete="cascade" />
            <many-to-one name="occupation" 
                column="refOccupation" 
                not-null="true" class="model.classes.occupation.Occupation" />
            </join>
            <join table="PARTIALNOTE" 
            optional="true" inverse="true">
            <key column="idExpense"/>
            <many-to-one name="note" 
                column="idNote" 
                not-null="true" class="model.classes.NoteExpenses" />
            </join>
      </class>
    </hibernate-mapping>

    NoteExpense :

    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
    <?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 22 f?vr. 2008 08:51:49 by Hibernate Tools 3.2.0.CR1 -->
    <hibernate-mapping>
        <class name="model.classes.NoteExpenses" table="NOTEEXPENSES" catalog="GestionConge">
            <id name="idNote" type="short">
                <column name="IDNote" precision="4" scale="0" />
                <generator class="increment" />
            </id>
            <set name="expenses" table="PARTIALNOTE" cascade="all-delete-orphan" >
            	<key column="idNote"  />
           	 	<many-to-many column="idExpense" 
                	class="model.classes.Expense"/>
        	</set>
            <property name="validInf" type="boolean">
                <column name="ValidInf" not-null="true" />
            </property>
            <property name="validSup" type="boolean">
                <column name="ValidSup" not-null="true" />
            </property>
             <property name="title" type="string">
                <column name="Title" not-null="true" />
            </property>
               <property name="idUser" type="short">
                <column name="IDUser" not-null="true" />
                </property>
        </class>
    </hibernate-mapping>

    Si quelqu'un à une idée sur l'origine du problème ^^

  2. #2
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Perso je ne vois pas le problème tout semble correct dans tes mappings. As-tu mis à true hibernate.show_sql afin d'examiner les ordres SQL?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Oui d'ailleurs c'est bien pratique cette option. En gros je fais un petit test JUnit qui me crée une note qui contient une expense, puis j'essaye de la delete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Save note
    Hibernate: select max(IDNote) from NOTEEXPENSES
    Hibernate: insert into GestionConge.NOTEEXPENSES (ValidInf, ValidSup, Title, IDUser, IDNote) values (?, ?, ?, ?, ?)
    Hibernate: insert into PARTIALNOTE (idNote, idExpense) values (?, ?)
    Hibernate: select this_.IDNote as IDNote8_0_, this_.ValidInf as ValidInf8_0_, this_.ValidSup as ValidSup8_0_, this_.Title as Title8_0_, this_.IDUser as IDUser8_0_ from GestionConge.NOTEEXPENSES this_ where this_.ValidInf like ? and this_.ValidSup like ?
    Hibernate: select expense0_.IDExpense as IDExpense6_0_, expense0_.Nature as Nature6_0_, expense0_.Date as Date6_0_, expense0_.Amount as Amount6_0_, expense0_1_.refOccupation as refOccup2_3_0_, expense0_2_.idNote as idNote7_0_ from GestionConge.EXPENSE expense0_ left outer join OCCUPATIONEXPENSE expense0_1_ on expense0_.IDExpense=expense0_1_.idExpense left outer join PARTIALNOTE expense0_2_ on expense0_.IDExpense=expense0_2_.idExpense where expense0_.IDExpense=?
    Hibernate: select noteexpens0_.IDNote as IDNote8_1_, noteexpens0_.ValidInf as ValidInf8_1_, noteexpens0_.ValidSup as ValidSup8_1_, noteexpens0_.Title as Title8_1_, noteexpens0_.IDUser as IDUser8_1_, expenses1_.idNote as idNote3_, expense2_.IDExpense as idExpense3_, expense2_.IDExpense as IDExpense6_0_, expense2_.Nature as Nature6_0_, expense2_.Date as Date6_0_, expense2_.Amount as Amount6_0_, expense2_1_.refOccupation as refOccup2_3_0_, expense2_2_.idNote as idNote7_0_ from GestionConge.NOTEEXPENSES noteexpens0_ left outer join PARTIALNOTE expenses1_ on noteexpens0_.IDNote=expenses1_.idNote left outer join GestionConge.EXPENSE expense2_ on expenses1_.idExpense=expense2_.IDExpense left outer join OCCUPATIONEXPENSE expense2_1_ on expense2_.IDExpense=expense2_1_.idExpense left outer join PARTIALNOTE expense2_2_ on expense2_.IDExpense=expense2_2_.idExpense where noteexpens0_.IDNote=?
    Hibernate: delete from GestionConge.EXPENSE where IDExpense=?
    Hibernate: delete from GestionConge.NOTEEXPENSES where IDNote=?

    Et aucune trace d'un delete from PartialNote :'(

  4. #4
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    T'arrives juste m'expliquer ton choix pour l'élément <join>?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Etant donné qu'une NoteExpense peut contenir un à plusieurs Expense , ça me semble être la meilleure solution pour modéliser tout ça au niveau base de données non?

  6. #6
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Du côté NoteExpense je suis d'accord avec toi, c'est plus sur Expense que je me pose des questions. Pourquoi le:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <join table="PARTIALNOTE" 
            optional="true" inverse="true">
            <key column="idExpense"/>
            <many-to-one name="note" 
                column="idNote" 
                not-null="true" class="model.classes.NoteExpenses" />
            </join>

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

Discussions similaires

  1. delete sur une table avec jointure
    Par Jarod51 dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/09/2011, 10h26
  2. Hibernate/JPA: ManyToMany, mise à jour dans une table de jointure.
    Par PhilippeGibault dans le forum Hibernate
    Réponses: 1
    Dernier message: 19/04/2011, 14h40
  3. Delete dans une table sans id
    Par mister3957 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/08/2010, 19h24
  4. delete dans une table contenant des primary key
    Par bracket dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/11/2008, 17h41
  5. PB Lock sur delete dans une table
    Par greatmaster1971 dans le forum DB2
    Réponses: 10
    Dernier message: 06/07/2008, 20h49

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