java - Grails 3.3.2 域类继承问题

标签 java inheritance grails groovy grails-orm

我一直在从 Grails 3.2.11 迁移到 3.3.2,但遇到了一个奇怪的问题:

如果域类继承自 src/main/groovy 中的类 - 它会在第一次正确创建并保存到数据库中。但是,当您从数据库检索它并尝试更新继承的属性时 - 它们不会保存回数据库。

例如:

abstract class AbstractTest {
    String field
}

class Test extends AbstractTest {

    static constraints = {
    }
}

如果您在 grails 控制台中运行以下脚本,它将打印正确的值,但如果您检查数据库 - 会存储旧值(在创建时设置):

import testapp.Test

new Test(field: 'original').save(flush: true)
Test test = Test.list().find()
println test.properties
test.field = 'modified'
println test.save(flush: true)
test = Test.list().find()
println test.properties

参见https://github.com/ahlinist/testGorm

我使用mysql,登录:'root',没有pass

JDBC 日志记录 (logSql: true) 发现没有更新查询发送到数据库,但内存中状态(例如 Test.list()*.properties)就像继承的属性已成功更新一样。

祖先属性的更新在 3.2.11 中运行良好。在文档中找不到任何答案。我错过了什么?

最佳答案

将 @grails.gorm.dirty.checking.DirtyCheck 添加到抽象类解决了问题。

PS请参阅文档:GORM upgrade notes (1.2.13.抽象基类的脏检查部分)

关于java - Grails 3.3.2 域类继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48041634/

相关文章:

java - 如何使用泛型获取集合的内容?

C# 简化并可能概括了我的对象克隆方法

c# - 继承 Class1 并实现 Interface1,以防 Class1 已经实现 Interface1

java - Android:抽屉导航图标

java - 如何在java中编写虚拟条件断点

mysql - 使用 grails 导入文件 CSV 时获取下一行

mysql - Grails 数据库迁移插件问题

json - 使用默认Grails JSON渲染器时的Snake case json

java - 简单工厂——检查数据正确性

java - 继承中的 ArrayStoreException