3 Stimmen

Die Aufrechterhaltung beider Seiten der selbstbezogenen viele-zu-viele Beziehung im Grails-Domänenobjekt

Ich habe Probleme, eine Many-to-Many-Beziehung in Grails zum Laufen zu bringen. Gibt es etwas offensichtlich falsches an folgendem:

class Person {
    static hasMany = [friends: Person]
    static mappedBy = [friends: 'friends']

    String name
    List friends = []

    String toString() {
        return this.name
    }
}

class BootStrap {
     def init = { servletContext ->
        Person bob = new Person(name: 'bob').save()
        Person jaq = new Person(name: 'jaq').save()
        jaq.friends << bob

        println "Bobs Freunde: ${bob.friends}"
        println "Jaqs Freunde: ${jaq.friends}"
     }
} 

Ich würde erwarten, dass Bob mit Jaq befreundet ist und umgekehrt, aber ich bekomme folgende Ausgabe beim Start:

Grails-Anwendung wird ausgeführt..
Bobs Freunde: []
Jaqs Freunde: [Bob]

(Ich verwende Grails 1.2.0)

7voto

tim_yates Punkte 160397

Dies scheint zu funktionieren:

class Person {
    static hasMany   = [ friends: Person ]
    static mappedBy  = [ friends: 'friends' ]
    String name

    String toString() {
        name
    }
}

und dann im BootStrap:

class BootStrap {
     def init = { servletContext ->
        Person bob = new Person(name: 'bob').save()
        Person jaq = new Person(name: 'jaq').save()

        jaq.addToFriends( bob )

        println "Bobs Freunde: ${bob.friends}"
        println "Jaqs Freunde: ${jaq.friends}"
     }
} 

Ich bekomme folgendes:

Running Grails application..
Bobs Freunde: [jaq]
Jaqs Freunde: [bob]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X