gpt4 book ai didi

hibernate - Grails 级联行为

转载 作者:行者123 更新时间:2023-12-02 14:05:10 25 4
gpt4 key购买 nike

我被这个问题困住了。代码对我来说看起来不错(显然我错过了一些东西。问题是它是什么?)

我有一个项目类

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:对象引用未保存的 transient 实例 - 在刷新之前保存 transient 实例:管理器

当我这样做时
Project project = new Project()
Manager mgr = new Manager(...)
project.manager = mgr
project?.manager.save()
project.save()

它工作得很好。但我认为 project?.manger.save() 不应该是必需的!!

最佳答案

一个快速的解决方法是在保存项目之前保存经理。

您也没有belongsTo 设置。查看 grails 文档的第 5 章。

http://grails.org/doc/latest/

“在双向一对多的情况下,多方未定义所属关系,则将级联策略设置为一侧的“SAVE-UPDATE”和多方的“NONE”。”

因此,如果我正确理解,您可以在 mgr(一侧)调用 save,但不能在项目端调用 save(以使级联工作)

在双向一对多的情况下,其中多方定义了一个belongsTo,然后将级联策略设置为一侧的“ALL”和多方的“NONE”。

您还需要查看第 5.5.2.9 节,您可以在其中指定自定义级联行为。

关于hibernate - Grails 级联行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3269006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com