2011-12-15 11 views
1

休止状態のセッションを開くと(sessionFactory.openSession())、閉じられている可能性があります。それは大丈夫です。開いているセッションを閉じることができない場合は、アプリケーションのどこにデータを保存したり更新したり削除したりするのではなく、開かれたセッションを閉じる方法はありますか?閉じる開いている休止状態のセッションがある場合は

(開いているセッションが開いている場合は、閉じてくださいいくつかのコードで閉じることができないセッションを閉じるための方法)。

答えて

3

データベース操作が完了したときにセッションを終了しないのはなぜですか? DAOクラスでは、開かれたセッションでデータベース操作を実行します。最後にブロックして、セッションを閉じます。あなたがたJFrameのイベントを閉じるに

Session sess = sessionFactory.getCurrentSession(); 

して閉じるセッションを使用して、現在のセッションを取得することができます

finally { 
    if(session!=null){ 
     session.close(); 
    } 
} 

OR

: あなたは次のようにセッションを閉じることができます。

私はここでの主な契約はセッションインスタンスの作成ですthis link

から次の行を取得します。通常 アプリケーションには1つのSessionFactoryインスタンスがあり、スレッドに サービスを提供するスレッドは、このファクトリからSessionインスタンスを取得します。 SessionFactoryの内部状態は不変です。 が作成されると、この内部状態が設定されます。この内部状態には、オブジェクト/リレーショナル・マッピングに関するすべての のメタデータが含まれます。 実装者はスレッドセーフでなければなりません。

操作やトランザクションが終了したらセッションを終了するのが私たちの義務です。 sessionfactoryを閉じると、すべてのリソース(接続プールなど)が適切に解放されます。

+1

ありがとうございます。セッションを閉じることを間違えて忘れてしまった場合や、アプリケーションが実行されたときに開かれたセッションが開いてメモリが浪費される可能性があります。そのような場合、どのようにセッションを開いたり閉じたりするのか? –

+0

あなたはそのようなシナリオの例を挙げることができますか(私は視覚化できません)? –

+1

'セッションs = sessionFactory.openSession();リストlist = s.createCritaria ... .list(); 'このセッションの 'を閉じるのを忘れた場合(コードはありません:s.close();)このリストの取得はもっと多く実行されます。新しいセッションが開かれます。上記のコードが実行されるたびに、新しいセッションが開始されますが、閉じられません。さらにオープンなセッションが存在する可能性があります。最後に、jvmメモリが過負荷になる原因になる可能性があります。私は存在していれば開かれた儀式を閉じたいと思う。あなたの注意をありがとう –