Grails 4 - 为什么域 class 没有被标记为脏?

Grails 4 - why is domain class not being marked as dirty?

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

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

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

User.loginSucess()方法是这样的:

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' 用于写入 Postgres。)

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