I nomi delle classi e dei campi vengono utilizzati in HQL e i nomi delle tabelle e delle colonne in SQL. Quindi non dovresti vedere i trattini bassi (almeno non molti) nelle query HQL. Inoltre, è improbabile che sia un fattore qui, ma le query HQL vengono eseguite da findAll
e quelli eseguiti da executeQuery
può essere leggermente diverso. Non riesco a ricordare quale sia la differenza, ma executeQuery
è quello corretto, indipendentemente dalla classe di dominio coinvolta.
È difficile saperlo senza vedere le classi di dominio, ma sembra artifact_id
dovrebbe essere artifact.id
e document_id
dovrebbe essere document.id
. E poiché hai l'istanza Document, è più O-O-corretto confrontare gli oggetti e non i loro ID. Infine presumo che active
è una proprietà booleana, quindi ha bisogno di un valore booleano e non di 1 o 0. Quindi, mettendo tutto insieme, la mia ipotesi migliore è che questo sia quello che vuoi:
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])
Nota che devi separare i valori dei parametri dai controlli di impaginazione in due mappe.