Grails/GORM が提供する動的メソッド addTo* をオーバーライドしようとしましたが、うまくいきません。
コードは次のとおりです。
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)
問題は、addToPlayers を呼び出すときに、次の例外が発生したことです。
java.lang.NullPointerException: Cannot invoke method add() on null object
基本的に、コレクション「プレーヤー」を自分で初期化する必要があるようです。
その前に、GORM メカニズムについていくつかの洞察を得たいと思います。
1 - GORM のコレクションのデフォルトの実装は何ですか (java.util.Set の実装であることは知っていますが、どの実装ですか?)
2 - それは正しいことですか (addToPlayers メソッドをオーバーライドすることによって) ? (私の唯一の必要性は、マッチ インスタンスでプレーヤーが追加/削除されるたびにオブジェクト MatchPlayer を作成/削除することです)。はいの場合、なぜ例外があるのですか? このためのより良い設計はありますか?
ありがとうございました。