代码之家  ›  专栏  ›  技术社区  ›  fabien7474 Jan Tchärmän

如何重写addto*和removefrom*gorm/grails方法?

  •  4
  • fabien7474 Jan Tchärmän  · 技术社区  · 16 年前

    我试图重写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方法)?(我只需要在每次在匹配实例中添加/删除播放器时创建/删除对象match player)。如果是,为什么我有例外?你有更好的设计吗?

    谢谢您。

    1 回复  |  直到 16 年前
        1
  •  3
  •   Burt Beckwith    16 年前

    您的代码类似于标准Grails方法,请参见org.codehaus.groovy.grails.pluginsDomainClassGrailsPlugin.addRelationshipManagementMethods()中的代码。如果不指定集合的类型,则初始集合实现为哈希集;如果指定sortedset,则为treeset,例如。

    static hasMany = [players: Player, matchPlayers: MatchPlayer]
    SortedSet players
    
    推荐文章