Grails 3.1.1 - 当模型类扩展另一个groovy类时,脏检查不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Grails 3.1.1 - 当模型类扩展另一个groovy类时,脏检查不起作用相关的知识,希望对你有一定的参考价值。
我有一个域类,它扩展了另一个具有相同名称但在不同库中的不同包中的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。
问题:即使已修改模型,模型也不会标记为脏。当模型类扩展另一个groovy类时会发生这种情况。
如何重现:
- 运行应用程序。
- 创建新的模型对象(模型名称为Derived)
- 使用编辑视图修改对象,然后单击“更新”。
- 您将看到修改不会持久存在。
最后我找到了一个参考here,它解释了更新脏检查状态失败的原因。
我添加了@DirtyCheck注释,它解决了问题。
然而,这会对我们图书馆的设计产生负面影响。
我们为每个类别分别开展项目:
- 商业模式类
- 业务逻辑类
- 用户界面
我们的想法是让模块完全相互独立。因此,任何UI技术都可以使用模型和业务逻辑库。现在的问题是我必须将gorm依赖项添加到我的业务模型项目中以进行注释。
compile 'org.grails:grails-datastore-gorm:6.1.7.RELEASE'
设计明智我们喜欢我们在完全独立于UI或hibernate等持久技术的项目中的模型类。这样,这些模型类可以用于各种不同的项目,而不需要任何其他依赖项。到目前为止,我们通过创建一个扩展库中实际模型类的新类来实现这一目标
有没有办法解决这个问题,而不修改基类?
简而言之,模型类(POJO)现在依赖于grails框架,而在早期版本中则不是。
以上是关于Grails 3.1.1 - 当模型类扩展另一个groovy类时,脏检查不起作用的主要内容,如果未能解决你的问题,请参考以下文章