如何重写addTo*和RemoveFrom*GORM/Grails方法?
我试图重写Grails/GORM提供的动态方法addTo*,但它似乎不起作用 代码如下:如何重写addTo*和RemoveFrom*GORM/Grails方法?,grails,gorm,Grails,Gorm,我试图重写Grails/GORM提供的动态方法addTo*,但它似乎不起作用 代码如下: class Match { static hasMany = [players: Player, matchPlayers: MatchPlayer] void addToPlayers(Player player) { if (players.add(player)) { MatchPlayer matchPlayer = new MatchPla
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方法)?(每次在match实例中添加/删除玩家时,我只需要创建/删除一个对象MatchPlayer)。如果是,为什么我有例外?你有更好的设计吗
谢谢。您的代码类似于标准的Grails方法,请参阅org.codehaus.groovy.Grails.pluginDomainClassGrailsPlugin.addRelationshipManagementMethods()中的代码。如果未指定集合类型,则初始集合实现为哈希集;如果指定SortedSet,则初始集合实现为TreeSet,例如
static hasMany = [players: Player, matchPlayers: MatchPlayer]
SortedSet players
谢谢。关于我的第二个问题,您是否认为建议重写addTo*/removeFrom*方法?您还有其他方法吗?当然,这允许您使用标准的Grails方法,但需要自定义行为。另一种选择是将所有内容都转移到服务方法中,但这是一种偏好。