sql >> Base de Datos >  >> RDS >> Mysql

Consulta de SQL a HQL Grails

Utiliza nombres de clases y campos en HQL, y nombres de tablas y columnas en SQL. Por lo tanto, no debería ver guiones bajos (al menos no muchos) en las consultas HQL. Además, es poco probable que sea un factor aquí, pero las consultas HQL se ejecutan desde findAll y los que se ejecutan desde executeQuery puede ser ligeramente diferente. No puedo recordar cuál es la diferencia, pero executeQuery es el correcto sin importar qué clase de dominio esté involucrada.

Es difícil saberlo sin ver las clases de dominio, pero parece que artifact_id debe ser artifact.id y document_id debe ser document.id . Y dado que tiene la instancia de Documento, es más O-O-apropiado comparar los objetos y no sus identificaciones. Finalmente asumo que active es una propiedad booleana, por lo que necesita un valor booleano y no un 1 o un 0. Entonces, juntando todo esto, lo mejor que puedo suponer es que esto es lo que quieres:

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])

Tenga en cuenta que debe separar los valores de los parámetros de los controles de paginación en dos mapas.