我遇到了这个问题。代码看起来不错(显然我错过了一些东西。问题是它是什么?)
我有一个Project类
def class project{
...
Manager manager
}
这是Person和Manager类定义
def class Person{
String firstName
String lastName
}
def class Manager extends Person{
static hasMany = [ projects: Project]
}
关系很简单 - 项目有一个经理,经理有很多项目。据我所知,在一对多的关系中,存储级联,因为它是双向的一对多。但是当我这样做时
Project project = new Project()
Manager mgr = new Manager(...)
project.manager = mgr
project.save()
我收到以下错误 引起:org.hibernate.TransientObjectException:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:Manager
当我这样做时
Project project = new Project()
Manager mgr = new Manager(...)
project.manager = mgr
project?.manager.save()
project.save()
它运作得很好。但我认为不应该要求项目?.manger.save()!!
答案 0 :(得分:2)
快速解决方法是在保存项目之前保存管理器。
您也没有belongsTo设置。查看grails文档的第5章。
“在双向一对多的情况下,许多方面没有定义belongsTo,那么级联策略的一方为”SAVE-UPDATE“,多方为”NONE“。
所以,如果我正确地得到了这个,你可以在mgr(一方)上调用save,但不能保存在项目一侧(以便级联工作)
在双向一对多的情况下,许多方定义了belongsTo,那么级联策略对于一方设置为“ALL”而对于多方设置为“NONE”。
您还需要查看5.5.2.9节,您可以在其中指定自定义级联行为。