Bonjour,
je fais appel à votre aide concernant le problème que je rencontre :
-----------------------------------------------------------------------
-->3 entités : "Personne", "Employe", "Utilisateur".
-->Une relation d'héritage : "Personne" est le parent, "Employe" est l'enfant.
-->Une relation d'association : "Personne" possède un attribut de type "Utilisateur".
-->Mon objectif : Récupérer le type de poste de l'employe, connaissant l'identifiant de l'utilisateur.
-->Une requête JPQL : voir ci-dessous.
-->Un warning de compilation : L'enfant ("Employe") n'a pas accès aux attributs du parent ("Personne").
Ci-dessous, les détails de ce problème :
(1.)L'entité 'Personne' : c'est le parent.
-----------------------------------------------------------------------
(2.)L'entité 'Utilisateur' :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 @Entity @Inheritance(strategy= InheritanceType.JOINED) public class Personne implements Serializable { @Id private Long id; @OneToOne private Utilisateur utilisateur; }
-----------------------------------------------------------------------
(3.)L'entité 'Employe' : c'est l'enfant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @Entity public class Utilisateur implements Serializable { @Id private Long id; private String identifiant; }
-----------------------------------------------------------------------
(4.)Les requêtes JPQL : (j'en ai essayé 2 !)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 @Entity public class Employe extends Personne implements Serializable { @ManyToOne private TypePoste typePoste; }
-----------------------------------------------------------------------
(5.)L'avertissement de compilation : (1 pour chacune des 2 requêtes ci-dessus !)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 query_1 = SELECT emp.typePoste FROM Employe emp WHERE emp.utilisateur.identifiant = :identifiant // compilation warning ! query_2 = SELECT emp.typePoste FROM Employe emp, Personne prs WHERE prs.utilisateur.identifiant = :identifiant AND prs.id = emp.id // compilation warning !
-----------------------------------------------------------------------
(6.)Ma question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 The state field path 'emp.utilisateur.identifiant' cannot be resolved to a valid type. The state field path 'emp.id' cannot be resolved to a valid type.
-----------------------------------------------------------------------
Dans la requête JPQL:
-->Je croyais que l'entité enfant ("Employe") AURAIT ACCES aux attributs de l'entité parent ("Personne") : Le compilateur indique que NON.
Comment corriger ce problème ?
Dois-je reformuler ma requête ? Comment ? (Peut-être qu'il existe une syntaxe JPQL que j'ignore)
Je suis bloqué. Merci d'avance pour vos aides.
chat-roux
Partager