2012-04-09 6 views
0

die folgenden Domain-Modelle vor:Grails GORM findAll null zurück Sammlung

class Sales{ 
    String salesInvoice 
    Customer customer 
} 

class Customer{ 
    int customerNumber 
    String name 
} 

Das Problem: Ich versuche, alle Verkäufe einen Kunden gegeben abzurufen. Also der Code:

def sales = Sales.findAllByCustomer(Customer.get(params.id)) 

Ich habe kein Problem mit dem Kunden. Aber wenn ich println sales.dump() verwenden ich so etwas wie

<[email protected] elementData=[mypackage.Sales : null, mypackage.Sales : null] size=2 modCount=3> 

Wenn ich es richtig verstehe, bedeutet dies, dass die Abfrage der Lage war, eine Liste von Sales zu bekommen, aber was ich nicht ganz verstehe ist, warum ist es eine Liste der Rückkehr Nullen? Ich habe versucht, eifrig zu holen, aber ich denke nicht, dass das in diesem speziellen Problem funktionieren wird. Also, wie bekomme ich eine Liste von Nicht-Null Sales Objekte?

+0

Welche Version von Grails verwendest du? Vielleicht führen Sie die geänderte Datenbindungsbehandlung in 2.0.2 aus? – stefanglase

+0

Ich benutze immer noch 2.0.0. Wie wirkt sich die Änderung der neuen Datenbindung auf meinen Code aus? Muss ich eine andere Syntax verwenden oder irgendwo eine andere Konfiguration hinzufügen? –

+0

Sehen Sie sich den folgenden Blogpost an, der die Änderungen beschreibt. http://blog.springsource.org/2012/03/28/secure-data-binding-with-grails/ Diese Funktion war standardmäßig in 2.0.2, wurde aber in 2.0.3 nicht als Standard festgelegt, da es sich um eine bahnbrechende Änderung handelt für viele Produktionscodes. – stefanglase

Antwort

3

Die Objekte, die Sie gezeigt haben, sind nicht NULL, aber die id der Objekte ist derzeit NULL: Jedes Grails-Domain-Objekt hat eine toString()-Methode, die ${name of the class} : ${id of the instance} drucken wird. Wenn Sie Ausgaben erhalten, wie Sie es gezeigt haben, bedeutet dies im Allgemeinen, dass Ihre Instanzen vorhanden sind (sonst wäre eine NPE geworfen worden!), Aber die ID ist noch nicht aus der Datenbank abgerufen.

  1. Ich denke, Sie erstellen die Objekte im Code vor. Sie müssen den Kontext leeren, sonst werden keine IDs erstellt.
  2. Sie sollten angeben, dass Ihr Sale zu einem Customer gehört. http://grails.org/doc/latest/guide/GORM.html#manyToOneAndOneToOne

BTW: Benennen Sie Domain-Klassen im Singular. So benennen Sie Sales zu Sale um.

+0

Sie haben Recht. Die Liste ist nicht null. Ich denke, Grails versuchte, das Attribut 'id' zu erhalten, aber mein Primärschlüssel hieß stattdessen 'salesInvoice'. Wie für die Namenskonvention ich weiß. Schuldig im Sinne der Anklage. :) –