Grails 3.1.1 - 模型类扩展另一个常规类时脏检查不工作

我有一个域类,它扩展了另一个具有相同名称但不同包中的groovy类,但是在不同的库中。Grails 3.1.1 - 模型类扩展另一个常规类时脏检查不工作

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

我读过那个grails 3发行版有一些增强的脏检查&这可能是一个bug或者我错过了一些东西。

新对象正确保存没有任何问题,我已经使用isDirty()修改域对象以及修改的属性&上方法都返回假。对象附加到会话中,通过确定isAttached()。

为了重现,我创建了一个测试项目,代码如下:&尝试更新使用脚手架生成的默认grails视图中的对象,但这些更改仍未保留。

注意:我已经做了类似的东西在Grails 2.4 &它曾经工作。

域类如下:

package com.perseus 

class Derived extends Base{

static constraints = {

name blank: false, nullable: false

}

}

基类中的src /主/常规:

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:即使模型已被修改,模型也未标记脏。当模型类扩展另一个常规类时会发生这种情况。

如何重现:

  1. 运行应用程序。
  2. 创建一个新模型对象(型号名称衍生)
  3. 使用编辑视图修改对象&单击更新。
  4. 您将看到修改不会持续。

回答:

最后,我找到了一个参考here,它说明了无法更新脏检查状态的原因。

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

但是这对我们的图书馆的设计有负面影响。

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

  • 业务模型类
  • 业务逻辑类
  • 用户界面

的想法是有完全相互独立的模块。因此,任何UI技术都可以使用模型&业务逻辑liraries。现在的问题是,我不得不向我的业务模型项目添加gorm依赖注释。

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

设计明智的,我们喜欢在完全独立的UI或持续性的技术如Hibernate的项目我们的模型类。以便这些模型类可以用于各种不同的项目,而无需任何额外的依赖项。我们通过创建一个新的类来实现这一点,它扩展了我们库中的实际模型类

有没有什么办法可以解决这个问题,而不需要修改基类?

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

以上是 Grails 3.1.1 - 模型类扩展另一个常规类时脏检查不工作 的全部内容, 来源链接: utcz.com/qa/264259.html

回到顶部