私はちょうど私が理解していない問題に遭遇しました。私たちの 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) {
hereを削除して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()
}
}
...
}
Permissions.groovy:
class Permissions {
boolean publishStream = false
}