我只是遇到了一个我不明白的问题。我们的 grails (2.2.2) 应用程序在第一个用户登录后抛出以下异常。一旦完成,就再也没有人看到它了。目前我们正在通过 Geb 测试重现它。
Caused by HibernateSystemException: connnection proxy not usable after transaction completion; nested exception is org.hibernate.HibernateException: connnection proxy not usable after transaction completion
->> 24 | doCall in gibbons5.recommender.ActivityRatingTagLib$_closure1
ActivityRatingTagLib(由 gsp 调用)中的行非常简单:
if (!User.get(session.user.id).permissions.publishStream) {
如果我删除User.get()
此处并立即访问 session.user ,一切正常,但它会在下一个 TagLib 调用中崩溃,在该调用中通过User.get()
.
我现在在互联网上搜索了很多解决方案,但没有任何有用的东西出现。由于这个例外似乎相当罕见,我想我们做的事情基本上是错误的,但是什么?
用户.groovy:
class User implements HttpSessionBindingListener {
...
boolean isOnline = false
Permissions permissions = new Permissions()
static embedded = ['infoPopups', 'permissions', 'userSettings']
void valueBound(HttpSessionBindingEvent event) {
isOnline = true
}
void valueUnbound(HttpSessionBindingEvent event) {
// we do not have a session any more
withTransaction {
def user = get(this.id)
user.isOnline = false
user.save()
}
}
...
}
权限.groovy:
class Permissions {
boolean publishStream = false
}