2014-02-06 5 views
6

Von der Grails belongsTo Dokumentation, was ist die Verwendung vonErklären belongsTo in Grails

class Book { 
    static belongsTo = Author 
} 

Was sind die Auswirkungen von Operationen auf Buch Kaskadierung, wenn CRUD-Operationen auf Autor durchgeführt?

EDIT:

Vielen Dank für Ihre Antworten, kann ich nicht richtig meine Frage angegeben haben. Ich möchte den Unterschied zwischen

static belongsTo [author:Author] 

vs

static belongsTo = Author 
+1

In Bezug auf Ihre bearbeiten, sind die beiden nicht anders (und eigentlich sollte der erste sein 'statische belongsTo = [Autor: Autor]'). Sie werden den gleichen Effekt haben. Im ersten Formular können Sie nur den Namen der Eigenschaft angeben. –

Antwort

9

belongsTo ist hilfreich wissen, wenn Sie einen Verweis zurück an den besitzenden Objekt müssen. In diesem Fall ist es wahrscheinlich, dass ein Author viele Book s hat. Aber vielleicht verwenden Sie ein Buchobjekt und möchten die Author dieser Buchinstanz erwähnen. Das ist ein guter Weg, um es zu bekommen.

Soweit CRUD geht, wird das Löschen oder Aktualisieren des Buchs nichts mit dem Author tun, aber das Löschen des Author löscht das Book. Wenn Sie nicht belongsTo hinzufügen, dann wird es keine Kaskadierung speichern/aktualisieren/löschen, Sie müssen es manuell tun.

Beispiel:

def a = new Author(name: 'J.K. Rawling') 
a.addToBooks(new Book(title: 'Harry Potter 1')) 
a.addToBooks(new Book(title: 'Harry Potter 2')) 
a.save() // Saves author and book instances 

a.delete() // Author and both books are deleted 

Edit:

Die OP ihre Frage aktualisiert, und ich bin ehrlich gesagt nicht sicher, was die Antwort sein würde. Hoffentlich wird Burt Beckwith bald auftauchen! Gute Frage, OP.

+0

Es sollte 'J. sein. K. Rowling' :)) – Guus

0

Neben Grantmc:

belongsTo praktisch markiert eine eingebettete Art der Beziehung zwischen den beiden, ist der Grund, warum alle Vorgänge automatisch kaskadiert werden, wenn diese verwendet wird.

Ohne belongsTo Sie benötigen Kaskaden manuell definieren

0

Es scheint verwirrend und zusätzlichen Aufwand zu mir (wenn Sie anycascades et al für Ihre relatoinship wollen) war es, da ich durch gleiche Ergebnis auf die Beziehung erreichen können einfach nur mit ein hasMany und ignorieren belongsTo, aber Sie müssen let Author Klassenvariable in Book Domain/Klasse

class Author { 
    static hasMany = [books: Book] 
} 

class Book { 
    Author author //can have only one Instance to be saved at a time 
} 

aber der Grund, warum Sie belongsTo ist es erzwingt die Beziehung verwenden sagen, machen den Weg von 012 zu folgenzu Book beim Einfügen von Daten, halten eine perfekte Art und Weise der Regelung der Beziehung mit belongsTo. Wenn Sie es nicht als Klassenvariable angeben oder belongsto verwenden, wird Grails die Zwei-Wege-Beziehung überhaupt nicht verstehen.

1

Beide Möglichkeiten bieten Kaskadierungseffekte auf die gleiche Weise. Ihr einziger Unterschied ist, dass Sie im ersten Fall einen Verweis auf den Autor in Book Objekt haben, während Sie in letzterem nicht.Das ist:

Sie können Book b = new Book(); b.author im zweiten Fall sagen.

0

Wie die doc says, ist es das selbe zu doesgesTo = [author: Author] als objectsTo = Autor, beide erstellen eine Eigenschaft namens Autor Verweis auf das "Vater" -Objekt.

Saludos