GORM:关系表未在多对多映射中更新

时间:2015-03-24 14:36:41

标签: grails many-to-many gorm

我有两个域类(简化),它们与多对多关系相关联。

一个团队可以有很多玩家,一个玩家可以属于很多团队。

当我打电话给'保存' 团队控制器的行动

  1. 玩家被保存在表格中。 (正如预期的那样)
  2. 团队会保存在表格中。 (正如预期的那样)
  3. 当我打印team.players和player.teams时,我看到正确的输出(见下面的代码)
  4. 关系表(TEAM_PLAYERS)中没有保存任何内容。为什么会这样?我是否需要自己在联接表中输入内容?如果此表未更新,我如何看到第3点的正确输出?
  5. Team.groovy 是:

    class Team {
    
       static hasMany = [players : Player]
       String name;
       String size;
    }
    

    Player.groovy 是:

    class Player {
    
       static hasMany = [teams : Team]
       static belongsTo = Team
    
       String fullName;
       String age;
    }
    

    TeamController.groovy 是:

    class TeamController {
    
       def save() {
          def player = new Player(fullName : "John Doe", age : "21").save()
          def team = new Team(name : "LocalXI", size : "1").addToPlayers(player).save();
          println "The players in the team are : " + team.players
          println "The teams this player belongs to are : " + player.teams
       }
    }
    
    上面的

    输出(当我拨打'保存'操作时):

    The players in the team are : [John Doe]
    The teams this player belongs to are : [LocalXI]
    

    我是Grails和Groovy的新手,并花了很多时间试图解决这个问题。

1 个答案:

答案 0 :(得分:0)

它应该工作。考虑到默认情况下save方法是事务性的,并且在方法完成之前它实际上不会持久保存数据。在事务中,一切看起来都正确,这就是println输出正确的原因。

如果您通过集成测试测试此控制器,则您的数据将不会持久存储,因为每次测试都会自动回滚事务。

如果您通过浏览器手动测试,请确保您当前的运行时环境中没有使用内存数据库。