投诉: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的评论作为对行为的解释和答案。