En fait ça ne marche pas complètement.
Si vous faites une requête du style
Query query = mgr.createNativeQuery("SELECT A.*, B.*, C.* FROM A, B, C", C.class)
ça marche
Par contre, si vous essayez de mapper sur B.class ou A.class vous aurez l'erreur décrite dans mon message précédent.
La raison est que, pour les cas où on mappe sur une des classes qui n'est pas en bout d'héritage, JPA a besoin de savoir laquelle via une propriété clazz_ dans la requête. Pour en connaitre les valeurs, créez une requête non native et récupérez le SQL générée.
Query query = mgr.createQuery("SELECT a, b, c FROM A a, B b, C c", A.class)
Dans mon cas j'ai
1 2 3 4 5 6
|
case
when C.idC is not null then 2
when B.idB is not null then 1
when A.idA is not null then 0
end as clazz_ |
Donc au final, pour mapper sur la classe C il faudra
Query query = mgr.createNativeQuery("SELECT A.*, B.*, C.*, 2 as class_ FROM A, B, C", C.class)
Plus d'infos :
http://www.methodicmadness.com/2009/...eck-clazz.html
Partager