在 EntityClass 中设置属性时不保存 Grails 3 实体
Grails 3 Entity not saved when properties set in EntityClass
我遇到了一个我不明白的问题。以下代码不起作用:
AccountingEntity accountingEntity = AccountingEntity.get(params.id);
accountingEntity.setLifecycleStatusToArchived();
accountingEntity.save(flush:true);
方法 setLivecylceStatusToArchived 看起来像:
void setLifecycleStatusToArchived() {
this.lifecycleStatus = AccountingEntity.LIFECYCLE_ARCHIVED; //predefined static variable
this.considerForRankingJob = false;
this.dateArchived = new Date();
}
问题是实体没有更新。
当我提前使用 accountingEntity.validate() 时没有验证错误。
但是,此代码有效:
AccountingEntity accountingEntity = AccountingEntity.get(params.id);
accountingEntity.setDateArchived(new Date());
accountingEntity.setConsiderForRankingJob(false);
accountingEntity.setLifecycleStatus(AccountingEntity.LIFECYCLE_ARCHIVED);
accountingEntity.save(flush:true);
从 Grails 3.2.9 更新到 3.3.0.RC1 (Gorm 6.1.5) 后代码不再工作,除非我按照指南中的所有步骤 (http://docs.grails.org/3.3.x/guide/upgrading.html) 和其余步骤代码工作正常(还有数据库访问等)
有人有想法吗?可能是什么问题?
在此先致谢并致以最诚挚的问候!
简短的回答是脏检查。当您在实例方法中设置属性时,Grails 不知道它们是脏的。
请参阅以下 github 问题以了解如何解决该问题:
https://github.com/grails/grails-data-mapping/issues/961
you have 2 options:
call markDirty
every time you change an internal field. This will be
better for performance or as per
http://gorm.grails.org/latest/hibernate/manual/index.html#upgradeNotes
use
hibernateDirtyChecking: true
我遇到了一个我不明白的问题。以下代码不起作用:
AccountingEntity accountingEntity = AccountingEntity.get(params.id);
accountingEntity.setLifecycleStatusToArchived();
accountingEntity.save(flush:true);
方法 setLivecylceStatusToArchived 看起来像:
void setLifecycleStatusToArchived() {
this.lifecycleStatus = AccountingEntity.LIFECYCLE_ARCHIVED; //predefined static variable
this.considerForRankingJob = false;
this.dateArchived = new Date();
}
问题是实体没有更新。 当我提前使用 accountingEntity.validate() 时没有验证错误。
但是,此代码有效:
AccountingEntity accountingEntity = AccountingEntity.get(params.id);
accountingEntity.setDateArchived(new Date());
accountingEntity.setConsiderForRankingJob(false);
accountingEntity.setLifecycleStatus(AccountingEntity.LIFECYCLE_ARCHIVED);
accountingEntity.save(flush:true);
从 Grails 3.2.9 更新到 3.3.0.RC1 (Gorm 6.1.5) 后代码不再工作,除非我按照指南中的所有步骤 (http://docs.grails.org/3.3.x/guide/upgrading.html) 和其余步骤代码工作正常(还有数据库访问等)
有人有想法吗?可能是什么问题?
在此先致谢并致以最诚挚的问候!
简短的回答是脏检查。当您在实例方法中设置属性时,Grails 不知道它们是脏的。
请参阅以下 github 问题以了解如何解决该问题:
https://github.com/grails/grails-data-mapping/issues/961
you have 2 options:
call
markDirty
every time you change an internal field. This will be better for performance or as per http://gorm.grails.org/latest/hibernate/manual/index.html#upgradeNotes usehibernateDirtyChecking: true