Grails 3.1.1 - 当模型类扩展另一个groovy类时,脏检查不起作用

时间:2017-12-18 14:30:36

标签: grails gorm grails-3.1 dirty-tracking

我有一个域类,它扩展了另一个具有相同名称但在不同库中的不同包中的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类时会发生这种情况。

如何重现:

  1. 运行该应用。
  2. 创建新模型对象(模型名称为Derived)
  3. 使用编辑视图修改对象&单击“更新”。
  4. 您将看到修改不会保留。

1 个答案:

答案 0 :(得分:0)

最后我找到了一个引用here,它解释了更新脏检查状态失败的原因。

我添加了 @DirtyCheck 注释,它解决了问题。

然而,这会对我们图书馆的设计产生负面影响。

我们为每个类别都有单独的项目:

  • 商业模式类
  • 业务逻辑类
  • 用户界面

我们的想法是让模块完全相互独立。所以型号&任何UI技术都可以使用业务逻辑库。现在问题是我必须将gorm依赖项添加到我的业务模型项目中以进行注释。

compile 'org.grails:grails-datastore-gorm:6.1.7.RELEASE'

设计明智我们喜欢完全独立于UI或hibernate等持久技术的项目中的模型类。这样,这些模型类可以用于各种不同的项目,而不需要任何其他依赖项。到目前为止,我们通过创建一个扩展库中实际模型类的新类来实现这一目标

有没有办法解决这个问题,而不修改基类?

简而言之,模型类(POJO)现在依赖于grails框架,而在早期版本中则不是。