1

Grails Hibernate トランザクションを使用して、コントローラー アクションで次のことを行います。

user.save(flush:true)

User.withTransaction {
  user.name = "newName"
  user.save(flush: true)
}

この場合、Hibernate/Grails は何をしますか? 最初のフラッシュで休止状態セッションをフラッシュすると、withTransaction は新しいセッションを作成しますか、それとも 1 つのセッションで 2 つの保存をアタッチしますか?

4

1 に答える 1

4

コントローラー アクション内にある場合は、OpenSessionInView インターセプターが要求の開始時に Hibernate セッションを開始するため、常に Hibernate セッションが開かれます。呼び出しは、現在のwithTransactionスレッド ローカル セッションを使用します。

transaction はセッションをフラッシュするので、明示的に行う必要はないことに注意してください。また、コントローラー コードをトランザクションやその他の永続化 (またはビジネス) ロジックで汚染するべきではないことに注意してください。このコードは、トランザクション サービス メソッド内にある必要があります。

于 2013-11-11T16:15:20.633 に答える