我有一个域类,该类别延伸了另一个带有相同名称但在其他库中的套件中的groovy类。
问题是当我在域类上修改实例时,它没有标记为dirty&因此,变化不持续。
我读到Grails 3版本对Dirty Checking&这可能是一个错误,或者我缺少一些东西。
新对象可以正确保存而没有任何问题,我在修改的域对象上使用了 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项目。
ISSSUE :即使已修改了模型,模型也不是肮脏的。当模型类扩展另一个时髦的类时,就会发生这种情况。
如何复制:
- 运行应用程序。
- 创建一个新的模型对象(派生模型名称)
- 使用编辑视图修改对象&单击更新。
- 您会看到修改不会持续。
最后,我在这里找到了一个参考,该引用解释了未能更新肮脏检查状态的原因。
我添加了 @dirtycheck 注释并解决了问题。
但是,这对我们的图书馆的设计产生了负面影响。
我们为每个类别都有单独的项目:
- 商业模型类
- 商业逻辑类
- 用户界面
这个想法是要使模块完全彼此独立。所以模型&任何UI技术都可以使用商业逻辑层。现在的问题是,我必须将Gorm依赖性添加到我的业务模型项目中以进行注释。
compile 'org.grails:grails-datastore-gorm:6.1.7.RELEASE'
设计明智的选择,我们喜欢独立于UI或Hibernate等持久技术的项目中的模型类。因此,这些模型类可以在各种不同的项目中使用,而无需任何其他依赖项。到目前 有什么办法可以解决此问题,而无需修改基类? 简而言之,模型类(POJO)现在取决于Grails框架,而在早期版本中,它们不是。