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...