Grails2.5.0-无法创建数据并将其链接到服务中的另一个对象
以下代码在Grails服务中引发错误: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,那么这段代码在控制器中运行良好。不过,我希望将其保存在服务中,以便以事务方式保存。我如何解决这个问题 编
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