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 update HQL


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 56
    Par défaut Problème update HQL
    Bonjour j'ai un soucis sur une requête complexe d'update HQL.

    Tout d'abord j'ai une requête sql qui ressemble à ceci et qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE apersonne a, apersonne e, fonctionrelation fr, afonction af, fonctions_rel_of_eleves fre, relationeleve r, astructure s SET a.structure_rattachement_fk = s.id
    WHERE a.id = af.personne_fk
    AND af.id = fr.id
    AND fr.type = "Autorite_parental"
    AND af.id = fre.afonctionofrel_id
    AND fre.relationeleve_id = r.id
    AND r.eleve_id = e.id
    AND e.structure_rattachement_fk = s.id
    AND a.categorie = 'Personne_relation_eleve' 
    AND a.etat <>'Incertain' 
    AND a.structure_rattachement_fk IS NULL
    Et je voudrai la transformer en HQL comme ceci (je ne suis pas sûr que ce soit bon) mais l'idée est là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    EntityManager().createQuery(
    "UPDATE PersonneRelationEleve a  
    SET a.structRattachement = 
    (
    SELECT e.structRattachement 
    FROM FonctionRelation fr, RelationEleve r, Eleve e 
    WHERE fr in elements(a.fonctions) 
    AND fr.id = a.id 
    AND fr.type = 'Autorite_parental' 
    AND fr in elements(r.membresRelations)
    ) 
    WHERE a.etat <>'Incertain' AND a.structRattachement IS NULL 
    AND a.categorie = 'Personne_relation_eleve'").executeUpdate()
    Et voici l'erreur que j'obtiens :
    You can't specify target table 'APersonne' for update in FROM clause
    Pour expliquer rapidement PersonneRelationEleve et Eleve héritent tous les deux de APersonne, donc voilà le problème ! Y aurait il une solutions ? Car avec hibernate je ne peux pas indiquer, comme dans ma requête sql, les autres tables jointes entre le update et le set.

    Je sais que cela peut passer sans problème en nativeQuery, mais S'il y a une modifications dans les tables il faudra adapter cette requête, chose que je voudrais éviter...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Par défaut
    Peux-tu donner plus d'informations sur le modèle de données ?
    La c'est pas facile de comprendre la requête.

    Est-ce que c'est normale qu'on ai 2 fois la jointure entre a et fr ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE fr in elements(a.fonctions) 
    AND fr.id = a.id

Discussions similaires

  1. Problème update ??
    Par cristolb dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/08/2005, 13h08
  2. Problème update
    Par elhani dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/08/2005, 12h30
  3. Problème UPDATE et LIKE
    Par Golork dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/08/2005, 16h01
  4. [Update]Problème update Eclipse
    Par tomate dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 05/04/2005, 11h14
  5. Problème UPDATE
    Par Eltaz dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/07/2004, 11h37

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