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

标签 grails grails-orm grails-3.1 dirty-tracking

我有一个域类,它扩展了另一个具有相同名称但在不同库中的不同包中的 groovy 类。

问题是当我修改域类上的实例时,它没有被标记为脏,因此不会保留更改。

我读过 grails 3 版本对脏检查有一些增强,这可能是一个错误或者我遗漏了一些东西。

新对象保存正确,没有任何问题,我使用了 isDirty() 修改域对象的方法以及修改的属性 & 都返回 .对象附加到 session ,通过 确认isAttached() .

为了重现,我使用以下代码创建了一个测试项目并尝试从使用脚手架生成的默认 grails View 更新对象,但仍然没有保留更改。

注:我在 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

}

Controller
package com.perseus

class DerivedController {

    static scaffold = Derived

}

链接到github project .

问题 :模型未标记为脏,即使它已被修改。当模型类扩展另一个 groovy 类时,就会发生这种情况。

如何重现:
  • 运行应用程序。
  • 创建新模型对象(模型名称为 Derived)
  • 使用编辑 View 修改对象并单击更新。
  • 您将看到修改没有持久化。
  • 最佳答案

    终于找到了引用 here这解释了更新脏检查状态失败的原因。

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

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

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

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

  • 这个想法是让模块彼此完全独立。因此,任何 UI 技术都可以使用模型和业务逻辑库。现在的问题是我必须将 gorm 依赖项添加到我的业务模型项目中以进行注释。
    compile 'org.grails:grails-datastore-gorm:6.1.7.RELEASE'
    

    在设计方面,我们喜欢我们的模型类在一个完全独立于 UI 或持久性技术(如 hibernate)的项目中。这样这些模型类就可以在各种不同的项目中使用,而无需任何额外的依赖。到目前为止,我们通过在我们的库中创建一个扩展实际模型类的新类来实现这一点

    有什么办法可以在不修改基类的情况下解决这个问题?

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

    关于Grails 3.1.1 - 当模型类扩展另一个 groovy 类时,脏检查不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47870593/

    相关文章:

    grails - grails heroku插件-无法解析类grails.plugin.cloudsupport.AbstractCloudTagLib

    grails - grails run-app 使用的默认 JVM 选项是什么

    rest - 可以在Grails上组合rest-api和角度轮廓吗?

    java - 没有这样的算法-bcrypt

    grails - 使用 Grails 3 渲染空的 HTTP 响应

    hibernate - org.hibernate.AssertionFailure:[…]条目中的id为null(发生异常后不要刷新Session)

    grails - 在GSP中导入和使用Groovy代码

    mysql - 使用 gorm 映射现有的 mysql 数据库

    grails-orm - Grails 2.0 的多数据源特性是否支持关系?

    grails - 如何防止 Grails 域被更新或删除?