4
我試圖覆蓋由Grails/GORM提供的動態方法addTo *,但它似乎不起作用。如何覆蓋addTo *和RemoveFrom * GORM/Grails方法?
下面是代碼:
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
所以基本上看來,我必須對自己初始化集合「玩家」。
好了,在這之前,我想對格姆機制的一些見解:
1 - 什麼是在GORM集的默認實現(我知道這是java.util.Set中的實現但哪一個?)
2 - 這是正確的做法(通過重寫addToPlayers方法)? (我唯一需要的是每次在匹配實例中添加/刪除玩家時創建/刪除MatchPlayer對象)。如果是,爲什麼我有例外?你有更好的設計嗎?
謝謝。
Thx。關於我的第二個問題,你是否推薦重寫addTo */removeFrom *方法?你有另一種方法嗎? – fabien7474 2009-09-30 14:06:46
當然,它允許您使用標準的Grails方法,但使用自定義行爲。另一種方法是將所有東西都轉換成服務方式,但這是一個偏好。 – 2009-10-04 05:55:49