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 :
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 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 voici l'erreur que j'obtiens :
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()
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.You can't specify target table 'APersonne' for update in FROM clause
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...
Partager