2010-07-09 13 views
7

Supongamos que tengo la siguiente clase de dominio:de consulta subconjunto de columnas con Gorm

class Book { 
    String title 
    String author 
    byte[] largeCoverArtImage 
} 

Tengo una lista en la que no necesito para mostrar largeCoverArtImage, ¿cómo puedo realizar la siguiente consulta SQL usando criterios GORM?

select title, author from Book 

Respuesta

7

Puede ejecutar consultas HQL que seleccionan columnas individuales con executeQuery:

def titlesAndAuthors = Book.executeQuery('select title, author from Book') 

Esto devolverá una lista de objetos [], por ejemplo,

for (row in titlesAndAuthors) { 
    String title = row[0] 
    String author = row[1] 
    ... 
} 
+0

No era la respuesta que esperaba, ya que no puedo usar el patrón de paginación Criteria estándar con executeQuery. Pero marcado como respuesta aceptada (es decir, "No"). Señalaré que una solución que sí funciona con Critiera es crear una vista db y separar la clase Dominio (asumiendo db heredado) específicamente para la página de la lista (aprovechando así de manera sencilla el patrón de paginación Criteria). Por supuesto, la desventaja es que entonces tiene dos clases incompatibles que representan esencialmente el mismo conjunto de registros. –

7

En Grails (probado con la versión 1.3.7) se puede escribir:

def titlesAndAuthors = Book.withCriteria { 
     projections { 
      property 'title', 'title' 
      property 'author', 'author' 
     } 
} 

y obtendrá una lista de Object [] como el anterior ejemplo.

+0

Genial, es bueno saber, estamos ejecutando Grails 1.3.2 en este momento, y en modo de mantenimiento, pero si alguna vez tengo la oportunidad de actualizar y probar esto, volveré y le contaré cómo funcionó. –

+2

Flash forward: estoy en un proyecto usando Grails 2.0.3 ahora y ¡esto funciona bien! –

+0

¿Hay alguna manera de obtener una lista de Object {} en lugar de la lista de Object []? El uso de "proyecciones" rompe mi API porque confío en tener listas de objetos. Sin embargo, recupera una lista de Objeto []. Gracias por la sugerencia. – Calicoder

Cuestiones relacionadas