Você usa nomes de classe e campo em HQL e nomes de tabela e coluna em SQL. Portanto, você não deve ver sublinhados (pelo menos não muitos) em consultas HQL. Além disso, é improvável que seja um fator aqui, mas as consultas HQL são executadas em
findAll
e aqueles executados a partir de executeQuery
pode ser um pouco diferente. Não consigo lembrar qual é a diferença, mas executeQuery
é o correto, não importa qual classe de domínio esteja envolvida. É difícil saber sem ver as classes de domínio, mas parece que
artifact_id
deve ser artifact.id
e document_id
deve ser document.id
. E como você tem a instância Document, é mais apropriado comparar os objetos e não seus ids. Finalmente, estou assumindo que active
é uma propriedade booleana, então ela precisa de um valor booleano e não de 1 ou 0. Então, juntando tudo isso, meu melhor palpite é que é isso que você quer: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])
Observe que você precisa separar os valores de parâmetro dos controles de paginação em dois mapas.