Grails 4-为什么域类没有被标记为dirty



投诉:Grails 4.0.10,Gorm 7.0.8.RELEASE在所有情况下都没有设置域类isDirty标志,因此没有对后端执行更新。

在Grails 3中,我多年来一直在处理令牌登录的过滤器中使用代码。成功后执行此代码:

User.withTransaction {
User user = User.get(userDetails.id)
Date now = new Date();
user.loginSuccess(now, userDetails.ipAddr, idno, true)
}

User.loginSuccess((方法如下:

void loginSuccess(Date when, String ipAddr, String idno = null, boolean flush = false) {
lastLoginDate = loginDate
loginDate = when.toTimestamp()
lastUpdated = when.toTimestamp()
lastLoginIp = loginIp
loginIp = ipAddr
loginFailedCount = 0
firstFailedDate = null
idno = idno
save(flush: flush, validate: false)
}

无论刷新标志的状态如何,这段代码都不会更新数据库,除非我以某种方式触发isDirty。我通过更改来实现

lastUpdated = when.toTimestamp()

this.setLastUpdated(when.toTimestamp())

这种设置脏旗的特殊性质早在几年前的Grails 2中就存在了。这种不同的行为是意料之中的,还是我的疏忽?(User.lastUpdated属性没有什么特别之处——一个映射为sqlType:"Timestamp"的Date字段,用于写入Postgres。(

以JSB的评论作为对行为的解释和答案。

相关内容

  • 没有找到相关文章

最新更新