sf.getCurrentSession()
初めて呼び出されるたびにセッションが開かれます。これにより、セッションが存在しない場合はまったく新しいセッションが作成され、既存のセッションがすでに存在する場合は既存のセッションが使用されます。
ThreadLocal
Tomcatでは、これにより、基になるオブジェクトを使用して作成されたスレッドにセッションが関連付けられます。ただし、Tomcatはスレッドプールを使用するため、リクエストがすでに関連付けられているセッションを持つスレッドを受信する可能性があります。そのため、まったく新しいセッションを作成することすらできない可能性があります。もう1つは、で取得したセッションがsf.getCurrentSession()
自動的にフラッシュされて閉じられることです。
一方、このメソッドsf.openSession()
は新しいセッションを作成しますが、それをスレッドに関連付けようとはしません。ただしsf.openSession()
、Hibernateに自動的に行わせるのではなく、ユーザーがセッションの終了とフラッシュを自分で処理することを期待するという点で、別の問題が発生することを忘れないでください。
sf.getCurrentSession()
通常は十分です。sf.openSession()
セッションが保存および管理される場所のより高いレベルの管理を提供および促進します。それは確かに高度なオプションです。