Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Grails 3.3.2域类继承问题_Java_Inheritance_Grails_Groovy_Gorm - Fatal编程技术网

Java Grails 3.3.2域类继承问题

Java Grails 3.3.2域类继承问题,java,inheritance,grails,groovy,gorm,Java,Inheritance,Grails,Groovy,Gorm,我一直在从Grails 3.2.11迁移到3.3.2,遇到了一个奇怪的问题: 若域类继承自src/main/groovy中的一个类,那个么它将在第一次正确地创建并保存到DB中。但是,当您从数据库中检索它并尝试更新继承的属性时,它们不会保存回数据库 例: 如果在grails控制台中运行以下脚本,它将打印正确的值,但如果检查DB,则会存储一个旧值(在创建时设置): import testapp.Test new Test(field: 'original').save(flush: true) T

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

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

例:

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

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

我使用mysql,登录:'root',无通行证

JDBC日志记录(logSql:true)发现没有向DB发送更新查询,但内存中状态(例如Test.list()*.properties)的工作方式就好像继承的属性已成功更新一样


在3.2.11中,祖先属性的更新工作正常。在文档中找不到任何答案。我缺少什么?

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


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

尝试使用grails.gorm中的
@Entity
注释抽象类。blah@grails.gorm.annotation.Entity使抽象类成为具有单独DB表的持久实体。我只需要抽象类参与继承层次结构,而不需要额外的DB表。
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