我有一个父表 Parent 和一个子表 Child。关系是这样的:
class Parent {
...
Child child
static mapping = {
child lazy: false, cascade: 'all'
}
static constraints = { ... }
}
class Child {
String name
static constraints = {
name unique: true
}
}
我创建了一些代码来将孩子添加到现有的父母。它看起来像这样:
def parent = Parent.get(id)
parent.child = new Child(name: (name))
parent.save()
此代码包含在事务服务方法中。
当孩子无效时它不起作用 - 没有验证发生。我得到一个著名的休眠错误:
对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。
可以很容易地解释:child 没有经过验证,当 GORM 保存对象时,它会尝试保存 child,然后它应该由于失败而停止,但它会继续并尝试使用未保存的 child 字段保存 parent。
当孩子无效时,我该如何解决?我需要将有关错误的信息传播到视图表单。
我已经尝试手动验证子级 - 它的错误字段包含 1 个错误,但父级仍然有效。我尝试将错误插入到父错误字段 - 父级无效,但 GORM 仍然尝试保存它。