Du bruger klasse- og feltnavne i HQL og tabel- og kolonnenavne i SQL. Så du bør ikke se understregninger (i hvert fald ikke mange) i HQL-forespørgsler. Det er også usandsynligt, at det er en faktor her, men HQL-forespørgsler kører fra findAll
og dem kører fra executeQuery
kan være lidt anderledes. Jeg kan ikke huske, hvad forskellen er, men executeQuery
er den korrekte, uanset hvilken domæneklasse der er involveret.
Det er svært at vide uden at se domæneklasserne, men det virker som artifact_id
skal være artifact.id
, og document_id
skal være document.id
. Og da du har Document-forekomsten, er det mere O-O-rigtigt at sammenligne objekterne og ikke deres id'er. Endelig antager jeg, at active
er en boolesk egenskab, så den har brug for en boolesk værdi og ikke en 1 eller 0. Så når jeg sætter det hele sammen, er mit bedste gæt, at det er det, du vil have:
def artifacts = Artifact.executeQuery(
"FROM Artifact WHERE id NOT IN ( " +
"SELECT artifact.id FROM Classification " +
"WHERE active = :active) AND document =:doc",
[active: true, doc:document],
[max:limit, offset:startIndex])
Bemærk, at du skal adskille parameterværdier fra pagineringskontroller i to kort.