私はちょうど私が理解していない問題に遭遇しました。私たちのgrails(2.2.2)アプリケーションは、最初のユーザーがログインした直後に次の例外をスローしています。いったん終了すれば、誰もそれを見たことはありません。現在、Gebテストで再現しています。GrailsとHibernateException:トランザクションの完了後に接続プロキシを使用できない
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にアクセスする場合しかし、User.get()を介してUserにアクセスする次のTagLib呼び出しでクラッシュします。
私はインターネット上で多くのソリューションを探していましたが、まだ役に立たないものはありませんでした。この例外は珍しいようですが、基本的には間違っていると思います。
私たちが試してみることができるアイデアは大変うれしく、さらに情報が必要な場合はお知らせください!
User.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
}
'permissions'をeagerly(' permissions lazy:false') 'user'を取得します。しかし、私の声明を出す前に、問題の 'User'ドメインを表示することができれば良いでしょう。 – dmahapatro
権限が埋め込まれているため、常にロードする必要があります。私はとにかく2つのクラスを追加しました! – Moritz
ActivityRatingTagLibはレイアウト内で呼び出されますか? –