我遇到了這個錯誤,當我嘗試設置lastLogin
日期的事件偵聽Config.groovy
:上次登錄日期Grails中使用Spring Security
2011-05-12 00:30:16,501 [」 ajp-bio-8009「-exec-6]錯誤 events.PatchedDefaultFlushEventListener - 無法同步 數據庫狀態與會話org.hibernate.StaleObjectStateException: 行被另一個事務更新或刪除(或未保存的值 映射不正確) :[spl.User#110]
我的代碼:
grails.plugins.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
User.withTransaction {
def user = appCtx.springSecurityService.currentUser
user.lastLogin = new Date()
user.save(flush: true)
}
}
我似乎無法在我的測試環境複製這一點,但有一次我試了一下住在生產,我看到這個錯誤,並決定恢復。將變更保存到合併解決問題?
編輯:我能夠在我的測試環境中通過同時登錄同一用戶來複制錯誤。爲了進一步調試,我在事件處理程序中添加了一些打印語句並開始使用它。事實證明,當我簽署或任何人登錄到我的網站時,事件處理程序被調用MULTIPLE次,因此過時的對象異常。爲什麼onInteractiveAuthenticationSuccessEvent在登錄時被多次調用?
感謝, 裏卡多
我會調查 - 什麼其他用戶字段可以登錄期間被寫入(也許這是一些後臺工作?)。 – 2011-05-12 07:58:15