Wie überschreibe ich die Methoden addTo * und RemoveFrom * GORM / Grails?

Ich habe versucht, die von Grails / GORM bereitgestellte dynamische Methode addTo * zu überschreiben, aber sie scheint nicht zu funktionieren.

Hier ist der Code:

class Match {
    static hasMany = [players: Player, matchPlayers: MatchPlayer]

    void addToPlayers(Player player) {
        if (players.add(player)) {
            MatchPlayer matchPlayer = new MatchPlayer(match: this, player: player)
            matchPlayers.add(matchPlayer)
        }
    }
}
ma = new Match().save()
ma.addToPlayers(player1)

Das Problem ist, dass beim Aufrufen von addToPlayers die folgende Ausnahme aufgetreten ist:

java.lang.NullPointerException: Cannot invoke method add() on null object

Im Grunde scheint es also so, als müsste ich mich die Sammlung "Spieler" initialisieren.

Nun, bevor ich das tue, möchte ich einige Einblicke in den GORM-Mechanismus haben:

1 - Was ist die Standardimplementierung für Sammlungen in GORM (ich weiß, dass es eine Implementierung von java.util.Set ist, aber welche?)

2 - Ist es das Richtige (durch Überschreiben der addToPlayers-Methode)? (Ich muss nur jedes Mal ein Objekt MatchPlayer erstellen / entfernen, wenn ein Spieler in der Match-Instanz hinzugefügt / entfernt wird.) Wenn ja, warum habe ich eine Ausnahme? Haben Sie ein besseres Design dafür?

Vielen Dank.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage