我试图覆盖 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)。如果是,为什么我有一个例外?你有更好的设计吗?
谢谢你。