1

私の質問は、Grails の休止状態のセッション スコープに関するものです。

  1. セッションは春のトランザクションにバインドされていますか?
  2. 新しいリクエストが作成されるたびに新しいセッションが作成されますか?
  3. または、セッションはスレッドにバインドされていますか?

これは説明できますか?

ありがとう

4

1 に答える 1

4

アクティブPlatformTransactionManagerHibernateTransactionManager. ただし、コントローラのリクエストはトランザクションで実行されないことに注意してください。サービスのみが自動的にトランザクションになります。データベースに書き込むコントローラーをリファクタリングして、サービスを使用してその作業を実行し、適切にトランザクション処理できるようにする必要があります。

リクエストごとに新しいセッションが作成され、 によってスレッドにバインドされますGrailsOpenSessionInViewInterceptor。これにより、遅延読み込みの例外やその他の問題を回避できます。セッションは、スレッドの最後でフラッシュされ、閉じられます。

興味のある方ThreadLocalTransactionSynchronizationManagerどうぞ。TransactionSynchronizationManager.getResource(sessionFactory)(を使用def sessionFactoryして へのアクセスを取得SessionFactory) を呼び出しSessionHolderて、セッションを保持している にアクセスできます。

于 2013-05-27T17:58:14.603 に答える