我有一个域类,它扩展了另一个具有相同名称但在不同库中的不同包中的 groovy 类。
问题是当我修改域类上的实例时,它没有被标记为脏,因此不会保留更改。
我读过 grails 3 版本对脏检查有一些增强,这可能是一个错误或者我遗漏了一些东西。
新对象被正确保存,没有任何问题,我在修改的域对象以及修改的属性上使用了 isDirty()方法,并且都返回false。对象附加到会话,通过isAttached()确认。
为了重现,我使用以下代码创建了一个测试项目,并尝试从使用脚手架生成的默认 grails 视图更新对象,但仍然没有保留更改。
注意:我在 Grails 2.4 中做过类似的事情,它曾经可以工作。
域类如下:
package com.perseus
class Derived extends Base{
static constraints = {
name blank: false, nullable: false
}
}
src/main/groovy 中的基类:
package com.perseus
class Base implements Serializable {
private static final long serialVersionUID = 1L
String name
}
控制器
package com.perseus
class DerivedController {
static scaffold = Derived
}
链接到 github项目。
问题:模型未标记为脏,即使它已被修改。当模型类扩展另一个 groovy 类时,就会发生这种情况。
如何重现:
- 运行应用程序。
- 创建一个新的模型对象(模型名称为 Derived)
- 使用编辑视图修改对象并单击更新。
- 您将看到修改没有持久化。