Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta SQL para HQL Grails


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.