PostgreSQLとHibernateとトランザクション
DBアクセスにHiberanteをつかったJavaアプリを作ったときに発生した悩ましい問題。検索だけの画面の実装において、一連の処理が終わった後にはHibernateのセッションを閉じるためにfinallyでSession.close()を実行している。けど、pgAdminでPostgreSQLのロックの状態をみると、検索したテーブルの索引を排他ロックしたままになっている。明示的にトランザクションの開始をしていないけど、セッションを終了させているのだからトランザクションも終了させてロックを解除して欲しい。けど、ロックしたままになっている。poolしていないけどセッションも残っているが若干気になるが、ロックが残っているもが解せない。
試行錯誤の結果、検索だけであっても明示的にトランザクションを開始し、セッションを閉じる前にcommitする。そうすることで、ロックの残骸はなくなったけどすっきりしないな。これまでの開発ではセッションを閉じるタイミングで暗黙的に開始されているトランザクションであればロールバックされ、ロックも開放されるのだけどな。
PostgreSQLとHibernateとの相性が良くないのか、Hiernateの使い方が間違っているのか。
トラックバック URI : http://www.akky.org/archives/69/trackback/
コメント (0)