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 multi-tables en hql


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Points : 46
    Points
    46
    Par défaut delete multi-tables en hql
    Bonjour!

    j'ai fait pas mal de recherches pour effectuer un delete multi-tables, et a bout de resultats google et autres, je solicite votre aide.

    Tout d'abord, ma bdd est mysql 5 mais pourrait eventuellement evoluer vers postgresql. En sql pur, je sais faire un delete multi-tables grace a la doc mysql, mais je voulais l'adapter en hql si possible, mais je sêche!

    autre solution, utiliser un createSQLQuery, mais là autre probleme, faire passer le nom de la table via son nom mappé par hibernate :

    je m'explique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE MATABLE1, MATABLE2 FROM tablesql1 as MATABLE1, tablesql2 as MATABLE2 WHERE...
    cela me retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table 'mabase.tablesql1' doesn't exist
    et pour cause, je souhaitait que hibernate me remplace tablesql1 par son nom tiré des fichiers de mapping soit 'table_sql_1'.

    j'ai tenté les addEntity, setEntity etc mais la aussi je bloque...

    quelqu'un pour m'aider svp?

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    HQL n'a pas prévu ce genre de syntaxe, JDBC non plus d'ailleurs...
    DELETE supprime une ligne (éventuellement plusieurs) dans une table (éventuellement plusieurs avec le delete cascade de défini sur des clés étrangères de tables liées) mais en aucun cas de supprimer sur plusieurs tables des enregistrements de même clé

    Avec HQL, la méthode delete porte sur un objet (entity), avec du code natif (createSQLQuery), ce sera la syntaxe standard JDBC

    Que veux-tu faire au juste ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    et bien jdbc le fait parfaitement, vu que cela depend de ta bdd derière et que dans mon cas mySql 5 gère le delete multi-tables.

    ex, voici ma requette en sql via hibernate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    String requette = "delete phef, slo, ghl, v, ev from person_has_extra_fed as phef, security_level_object as slo, groups_has_links as ghl, visibility as v, external_visibility as ev where phef.ID_OBJECT = slo.ID_OBJECT = ghl.ID_OBJECT = v.ID_OBJECT = ev.ID_OBJECT in (:lstId) and phef.ID_PLANIFICATION = slo.ID_PLANIFICATION = ghl.ID_PLANIFICATION = v.ID_PLANIFICATION = ev.ID_PLANIFICATION = '"+id_planification+"'";
                    sess.createSQLQuery(requette).setParameterList("lstId", ids_object).executeUpdate();
    et ça fonctionne a merveille.

    mon soucis, c'est de remplacer les noms des tables par les noms des classes java mappé sur ces tables (table sql -- fichier hmb.xml -- classe pojo java) comme on le fait en query hql classiques.

    ma requete précédente serait donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    String requette = "delete phef, slo, ghl, v, ev from PersonHasExtraFed as phef, SecurityLevelObject as slo, GroupsHasLinks as ghl, Visibility as v, ExternalVisibility as ev where phef.ID_OBJECT = slo.ID_OBJECT = ghl.ID_OBJECT = v.ID_OBJECT = ev.ID_OBJECT in (:lstId) and phef.ID_PLANIFICATION = slo.ID_PLANIFICATION = ghl.ID_PLANIFICATION = v.ID_PLANIFICATION = ev.ID_PLANIFICATION = '"+id_planification+"'";
                    sess.createSQLQuery(requette).setParameterList("lstId", ids_object).executeUpdate();
    j'ai mis en gras les modif

    par contre, je n'ai pas trouvé comment dire a hibernate de remplacer ces noms de classes par leur noms de table réelles via son mapping.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Autant pour moi, je n'avais jamais fais ça (ni vu d'ailleurs), mais effectivement, ça fonctionne (je me coucherai moins idiot ce soir, merci )

    Pour ton problème, il faudrait regarder du côté des metadata d'hibernate.
    On peut y accéder via l'objet Configuration (org.hibernate.cfg.Configuration)
    cfg.getClassMapping(nomEntity) -> PersistenceClass -> getRootTable() ou getTable() (à voir, mais je pense que getRootTable() serait plus adapté)

    En espérant que ça t'aide...
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. requete DELETE multi-tables
    Par Diwann dans le forum SQL
    Réponses: 10
    Dernier message: 23/02/2007, 17h38
  2. DELETE multi-tables avec jointures
    Par Xunil dans le forum Requêtes
    Réponses: 13
    Dernier message: 23/10/2006, 16h44
  3. [MySQL 3.23.58] delete multi-tables
    Par GLDavid dans le forum Requêtes
    Réponses: 8
    Dernier message: 07/08/2006, 11h45
  4. Problème DELETE multi-tables
    Par Gwipi dans le forum Requêtes
    Réponses: 5
    Dernier message: 22/05/2006, 08h48
  5. erreur de syntaxe DELETE multi-tables
    Par yayacameleon dans le forum Requêtes
    Réponses: 7
    Dernier message: 12/04/2006, 11h34

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