2010-07-09 9 views
7

Angenommen, ich habe die folgende Domain-Klasse:Abfrage Subset der Spalten mit Gorm

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

ich eine Listenansicht, wo ich brauche nicht largeCoverArtImage angezeigt werden, wie kann ich die folgende SQL-Abfrage mit GORM Kriterien erfüllen?

select title, author from Book 

Antwort

7

Sie HQL-Abfragen ausführen können, die einzelnen Spalten mit executeQuery wählen:

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

Dies ist eine Liste von Object [] zurück, zum Beispiel

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

Nicht die Antwort, auf die ich gehofft hatte, da ich das standardmäßige Criteria-Paginierungsmuster mit executeQuery nicht verwenden kann. Aber markiert als akzeptierte Antwort (d. H. "Nein"). Ich möchte darauf hinweisen, dass eine Lösung, die mit Critera funktioniert, darin besteht, eine db View- und separate Domain-Klasse (Legacy-db vorausgesetzt) ​​speziell für die Listenseite zu erstellen (und damit das Paginierungsmuster Criteria zu nutzen). Der Nachteil besteht natürlich darin, dass Sie zwei inkompatible Klassen haben, die im Wesentlichen die gleiche Menge an Datensätzen darstellen. –

7

In Grails (mit 1.3.7-Version getestet) können Sie schreiben:

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

Und Sie werden eine Liste von Object [] wie oben Beispiel erhalten.

+0

Cool - gut zu wissen, wir laufen grails 1.3.2 gerade jetzt, und im Wartungsmodus, aber wenn ich jemals die Möglichkeit bekomme, ein Upgrade durchzuführen und es auszuprobieren, komme ich zurück und lasse Sie wissen, wie es geklappt hat. –

+2

Flash forward: Ich arbeite gerade an einem Projekt mit Grails 2.0.3 und das funktioniert gut! –

+0

Gibt es eine Möglichkeit, eine Liste von Objekt {} anstelle von Liste von Objekt [] zu erhalten? die Verwendung von "Projektionen" bricht meine API, weil ich darauf angewiesen bin, Listen von Objekten zu haben. Es ruft zwar eine Liste von Object [] ab. Danke für den Vorschlag. – Calicoder

Verwandte Themen