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

时间:2015-09-17 22:30:56

标签: 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"

如果我在第一行刷新保存,此代码在控制器中正常工作。我想在服务中使用它,以便它在事务上保存。我该如何解决这个问题?

编辑:

以下是两个班级的要点:

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

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

编辑2:

我找到了一种解决方法,虽然它非常苛刻,但更优雅的解决方案会更好。我不知道它为什么会起作用,但是将用户改为static hasMany = [data: MyData, secondData: MyData, dummyData: MyData]可以解决问题。

1 个答案:

答案 0 :(得分:0)

我会说,你正面临GORM陷阱,有几个hasMany相同的类型。默认情况下,GORM无法解析它们,需要按正确的方向推送。

有关详细信息,请参阅ref-doc on mappedBy

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

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