Grails2.5.0-无法创建数据并将其链接到服务中的另一个对象

Grails2.5.0-无法创建数据并将其链接到服务中的另一个对象,grails,gorm,Grails,Gorm,以下代码在Grails服务中引发错误: def mydata = new MyData([data: data]).save() user1.addToData(mydata).save() user2.addToSecondData(mydata).save() 我得到以下错误: NULL not allowed for column "MYDATA_ID" 如果我在第一行刷新save,那么这段代码在控制器中运行良好。不过,我希望将其保存在服务中,以便以事务方式保存。我如何解决这个问题 编

以下代码在Grails服务中引发错误:

def mydata = new MyData([data: data]).save()
user1.addToData(mydata).save()
user2.addToSecondData(mydata).save()
我得到以下错误:

NULL not allowed for column "MYDATA_ID"
如果我在第一行刷新save,那么这段代码在控制器中运行良好。不过,我希望将其保存在服务中,以便以事务方式保存。我如何解决这个问题

编辑:

以下是两个课程的要点:

class User { 
... 
static hasMany = [data: MyData, secondData: MyData] 
... 
}

class MyData { 
... 
static belongsTo = User
static hasMany = [for: User]
...
}
编辑2:


我已经找到了一个解决方法,尽管它非常粗糙,而且一个更优雅的解决方案会更好。我不知道它为什么会起作用,但将用户hasMany更改为static hasMany=[data:MyData,secondData:MyData,dummyData:MyData]解决了这个问题。

我想说,你面临的是一个GORM-gotcha,有几个相同类型的
hasMany
。默认情况下,GORM无法解决这些问题,需要向正确的方向推进

详情请参阅:

因此,在您的情况下,您必须添加

class User { 
  ... 
  static hasMany = [data: MyData, secondData: MyData] 
  static mappedBy = [ data:'data', secondData:'secondData' ]
  ... 
}

发布mydata和user domain类别的要点添加要点我在启动时出错:错误加载插件管理器:不存在映射属性[secondData]如果我是你,我会改变关系结构:双向多对多带来的问题远多于解决方案。根据我的经验,在90%的情况下,简单的单向一对一就足够了,其余的可以作为查询实现。在您的情况下,我将从User类中删除hasMany,并在MyData中只保留static belongsTo=User