
Envoyé par
OButterlin
Le JPAQL n'est pas SQL, il fait des choses pour toi en fonction du mapping de tes entities.
Dans ton exemple, comme le dit tchize_, il n'y a pas de jointure des 2 tables et tant que tu n'accèdes pas à une propriété du "sous-objet", elle ne se fera pas (en lazy loading).
Pour faire une jointure explicite dans une requête, il faudrait passer par un "join fetch" sur la propriété
1 2
|
select a from AccountOperation a join fetch a.lodger |
Là, l'objet "lodger" sera initialisé
@tchize_ a raison, la requête n'est pas bonne, elle ne retourne pas la dernière transaction pour chaque lodger
en sql je ferais
1 2 3 4 5
| select * from account_operation ao1
where ao1.account_operation_id in (
select max(ao2.account_operation_id) as maxAoId
from account_operation ao2 group by ao2.lodger_id
) |
pour le jpa
select ao1 from AccountOperation ao1 join fetch ao1.lodger where ao1.accountOperationId in (select max(ao2.accountOperationId) from AccountOperation ao2 group by ao2.lodger.id)
ça fonctionne
Partager