Avatar billede brops Nybegynder
12. september 2012 - 16:08 Der er 4 kommentarer

Subquery i HQL

Jeg har følgende HQL:

String query = "SELECT OBJECT(l) FROM InboundNotification l INNER JOIN l.item item WHERE l.job = ? ORDER BY (SELECT SUM(itemInst.qty) FROM ItemInst itemInst WHERE itemInst.receivedFromNotification_id = l.id) DESC, item.localId DESC";

Jeg får desvære følgende fejl når jeg laver kørslen:

A serious error has occured: Call failed - root cause was: QuerySyntaxException Message: unexpected AST node: query [SELECT OBJECT(l) FROM com.persistence.entities.InboundNotification l INNER JOIN l.item item WHERE l.job = ? ORDER BY (SELECT SUM(itemInst.qty) FROM com.persistence.entities.ItemInst itemInst WHERE itemInst.receivedFromNotification_id = l.id) DESC, item.localId DESC].

Jeg har kunne læse mig frem til at jeg ikke kan have subquery i Order by, som jeg kan i sql.

Men hvordan jeg skal få det til at fungere kan jeg desværre ikke selv gennemskue.
Avatar billede arne_v Ekspert
12. september 2012 - 17:23 #1
Har du overvejet den simple loesning: drop ORDER BY i HQL og sorter den List<> som du faar retur?
Avatar billede brops Nybegynder
12. september 2012 - 17:33 #2
Ja men det giver et hastighed issue hvor svartider bliver for lange
Avatar billede arne_v Ekspert
12. september 2012 - 17:41 #3
Det lyder ikke rigtigt.

En ORDER BY paavirker ikke antal raekker der laeses fra disk og sendes over netvaerk til app kode.

Forskellen er udelukkende om der sorteres i app kode eller i databasen.
Avatar billede brops Nybegynder
12. september 2012 - 18:27 #4
Vi er enige Arne.

Men svartiderne er ikke over netværket men for at sortere listen contra hente en query ud der er sorteret.

Jeg er ikke klar over forskellen i hastighed men at klare det per hql fjerne mere ballastningen fra den kode der generer de view som det hele er afhængig af.

Så i bund og grund handler det om at undgå at have for meget i kodedelen hvis det kan klares i databasen. Og det er der den hql kommer ind i billedet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester