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 delete sur plusieurs tables


Sujet :

Hibernate Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 36
    Points : 34
    Points
    34
    Par défaut problème delete sur plusieurs tables
    Bonjour,

    malgré toutes mes recherches, je n'arrive pas à résoudre le problème suivant.

    Je cherche a supprimer une entrée dans deux tables, Events, et LuggagesEvents.

    LuggageEvents possède une clé primaire qui est également clé étrangère, ce qui donne :
    Events(Inum_event<pk>) et LuggageEvents(Inum_event<pk, fk>) avec une contrainte d'intégrité nommée EBEV_FK.

    mon mapping est le suivant pour la table LuggagesEvents (généré par JNUIS):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <hibernate-mapping>
    	<class name="LuggageEvents" table="LUGGAGE_EVENTS">
    		<id
    			name="inumEvent"
    			type="java.lang.Long"
    			column="INUM_EVENT"
    		>
    			<generator class="assigned"/>
    		</id>
    ...
    Pour supprimer une entrée de Events, je supprime d'abord l'entrée associée dans la table LuggageEvents puis celle d'Events.
    Lors du commit(), j'ai l'erreur suivante, alors que je ne catch aucune exception lors des deux delete() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Caused by: java.sql.SQLException: ORA-02292: integrity constraint (BDM.EBEV_FK) violated - child record found
    Je ne vois pas quelle erreur j'ai pu faire au niveau du code, peut-être cela vient-il de mon mapping ?

    Par ailleurs, supprimer uniquement une entrée de LuggagesEvents fonctionne...

    Merci de votre aide,

    Sebastien

  2. #2
    Membre confirmé Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Points : 493
    Points
    493
    Par défaut
    Logiquement, c'est parce qu'il doit rester au moins un LuggageEvents associé à l'Event que tu cherches à supprimer ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 36
    Points : 34
    Points
    34
    Par défaut
    hélas non !
    en traçant mes données et en les comparant à ce que retourne des requetes manuelles, tout semble bon.

    Si vous confirmez que mon mapping est ok, je tiens à préciser que tout se fait dans une même transaction, c'est à dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    beginTransaction()
    delete LuggageEvents 
    delete Events
    commitTransaction().
    n'y aurait-il pas une histoire de mise en cache par hibernate et une réorganisation automatique de l'ordre des requetes ?

    mes pistes s'amenuisent...

  4. #4
    Membre confirmé Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Points : 493
    Points
    493
    Par défaut
    Copie ici tes fichiers de mapping complet avec les relations entre entités pour qu'on puisse vérifier. Pour l'ordre des ordres SQL exécutés, as-tu passé l'attribut show_sql à true pour vérifier ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 36
    Points : 34
    Points
    34
    Par défaut [Résolu]
    Merci pour votre aide,

    j'ai finalement trouvé :
    le fait est que je n'utilise pas les méthodes hibernate directement, qui sont encapsulées par un framework métier...

    J'utilise donc une methode Remove() qui est obscure et qui est sensée appelée la methode delete() d'hibernate... sauf qu'elle ne trace aucune exception.

    Mon erreur était que mes objets persistents étaient chargés deux fois, ce qui m'empêchait de les supprimer (NotUniqueException il me semble), sans que je m'en rende compte (je mettais le fait que l'entrée existait toujours à cause de l'erreur dans le commit())

    Du coup, mes objets LuggageEvents n'étaient jamais supprimés.

    Tout est bon maintenant.

    Merci encore,

    Sebastien

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

Discussions similaires

  1. DELETE sur plusieurs tables
    Par kazuo0 dans le forum Requêtes
    Réponses: 5
    Dernier message: 21/12/2007, 18h24
  2. Delete sur plusieurs tables
    Par Megoy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/05/2007, 10h41
  3. Delete sur plusieurs tables
    Par estelledany dans le forum Langage SQL
    Réponses: 5
    Dernier message: 24/07/2006, 11h16
  4. [MSDE] Delete sur plusieurs tables ?
    Par hardballer dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/05/2006, 10h13
  5. delete sur plusieurs tables
    Par drinkmilk dans le forum Oracle
    Réponses: 11
    Dernier message: 22/03/2006, 16h43

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