gpt4 book ai didi

grails - 如何重写 GORM/Grails 的 addTo* 和 RemoveFrom* 方法?

转载 作者:行者123 更新时间:2023-12-02 04:01:33 28 4
gpt4 key购买 nike

我尝试重写 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 )。如果是,为什么我有异常(exception)?您对此有更好的设计吗?

谢谢。

最佳答案

您的代码与标准 Grails 方法类似,请参阅 org.codehaus.groovy.grails.pluginsDomainClassGrailsPlugin.addRelationshipManagementMethods() 中的代码。如果您不指定集合的​​类型,则初始 Set 实现是 HashSet;如果指定 SortedSet,则初始 Set 实现是 TreeSet,例如

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

关于grails - 如何重写 GORM/Grails 的 addTo* 和 RemoveFrom* 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1461857/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com