gpt4 book ai didi

grails - 当子实体包含无效数据时,Grails无法处理一对一关系

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

我有一个父表Parent和一个子表Child。关系是这样的:

class Parent {
...
Child child

static mapping = {
child lazy: false, cascade: 'all'
}
static constraints = { ... }
}

class Child {
String name

static constraints = {
name unique: true
}
}

我创建了一些代码以将 child 添加到现有的 parent 中。看起来像这样:
def parent = Parent.get(id)
parent.child = new Child(name: (name))
parent.save()

此代码包含在事务服务方法中。

当子代无效时,它将不起作用-不会进行验证。我收到一个著名的休眠错误:

object references an unsaved transient instance - save the transient instance before flushing`.



这很容易解释:未验证子代,当GORM保存对象时,它将尝试保存子代,然后由于失败而应停止,但是它将继续并尝试使用未保存的子代字段来保存父代。

如果 child 无效,我该如何解决?我需要将有关错误的信息传播到 View 表单。

我已经尝试过手动验证子级-它的错误字段包含1个错误,但父级仍然有效。我尝试将错误插入到父错误字段-父项无效,但GORM仍尝试保存它。

最佳答案

您在 child 与 parent 之间的关系中是否定义了 includesTo到(例如,静态belongsTo = [Parent])?如果您不这样做,则Grails将不会从父级到子级进行保存/更新,因为它不“拥有”该子级-因此,如果在该子级上未进行任何保存,则永远不会调用验证。所以尝试添加

static belongsTo = [Parent]

在Child类中,然后再次保存(如果您仍然没有看到Child验证,也可以使用 deepValidate:true保存)。

关于grails - 当子实体包含无效数据时,Grails无法处理一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220176/

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