以下代码在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]
可以解决问题。
答案 0 :(得分:0)
我会说,你正面临GORM陷阱,有几个hasMany
相同的类型。默认情况下,GORM无法解析它们,需要按正确的方向推送。
有关详细信息,请参阅ref-doc on mappedBy:
因此,在您的情况下,您必须添加
class User {
...
static hasMany = [data: MyData, secondData: MyData]
static mappedBy = [ data:'data', secondData:'secondData' ]
...
}