如何覆盖AddTo就*和* RemoveFrom GORM / Grails的方法呢?(How to

2019-08-16 15:52发布

我试图覆盖由Grails的/格姆提供的动态方法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

所以基本上看来,我必须对自己初始化集合“玩家”。

那么,在这之前,我想对格姆机制的一些见解:

1 - 什么是在GORM集的默认实现(我知道这是为java.util.Set但哪一个的实现?)

2 - 是它做的(通过重写addToPlayers法)正确的事? (我的唯一需要的是创建/删除对象MatchPlayer每一个玩家被添加时间/在匹配实例中删除)。 如果是的话,为什么我有一个例外? 你对此有一个更好的设计?

谢谢。

Answer 1:

您的代码是类似于标准的Grails的方法,请参阅org.codehaus.groovy.grails.pluginsDomainClassGrailsPlugin.addRelationshipManagementMethods此代码()。 初始设置执行或者是一个HashSet,如果你如果指定的SortedSet,如不指定集合类型,或一个TreeSet

static hasMany = [players: Player, matchPlayers: MatchPlayer]
SortedSet players


文章来源: How to override addTo* and RemoveFrom* GORM/Grails methods?
标签: grails gorm