我有一个域类,它扩展了另一个具有相同名称但在不同库中的不同包中的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 project。
Isssue :即使模型已被修改,模型也不会标记为脏。当模型类扩展另一个groovy类时会发生这种情况。
如何重现:
答案 0 :(得分:0)
最后我找到了一个引用here,它解释了更新脏检查状态失败的原因。
我添加了 @DirtyCheck 注释,它解决了问题。
然而,这会对我们图书馆的设计产生负面影响。
我们为每个类别都有单独的项目:
我们的想法是让模块完全相互独立。所以型号&任何UI技术都可以使用业务逻辑库。现在问题是我必须将gorm依赖项添加到我的业务模型项目中以进行注释。
compile 'org.grails:grails-datastore-gorm:6.1.7.RELEASE'
设计明智我们喜欢完全独立于UI或hibernate等持久技术的项目中的模型类。这样,这些模型类可以用于各种不同的项目,而不需要任何其他依赖项。到目前为止,我们通过创建一个扩展库中实际模型类的新类来实现这一目标
有没有办法解决这个问题,而不修改基类?
简而言之,模型类(POJO)现在依赖于grails框架,而在早期版本中则不是。