5

HibernateSessionとConnectionの関係ができました。しかし今、私は別の質問を受けます:休止状態のsessionfactoryはどのようにセッションを管理しますか?次のコードセグメント:DAOクラスのsave()メソッド:

Session session = sessionFactory.openSession();
   Transaction tx=null;
   tx=session.beginTransaction(); 
   session.save(transientInstance);
   session.flush();
   tx.commit();

を呼び出すとsessionFactory.openSession()、現在のスレッドに(ThreadLocalを介して)接続された新しいセッションが作成されます。このセッションもJDBC接続に接続されますが、ご覧のとおり、セッション(セッション)を閉じる必要はありません。 close())、どちらの接続もありません。では、Hibernateセッションのライフサイクルはどのようなもので、どのような状況で閉じられますか?自動的?

4

1 に答える 1

9

getCurrentSessionこの方法でのみ、セッションが休止状態から閉じられることを確認できる可能性があるため、この方法をお勧めします

構成J2EE現在のセッション。

この方法を使用する場合はopenSession、自分でセッションを閉じる必要があります。hibernateを使い始めた後、すべてのセッションが自動的に閉じられるので、どちらの方法を使用してもかまわないと思いました...私は間違っていました。休止状態のSessionStatisticsのSessionStatisticsを使用 して、開いているセッションがすでに開かれていて、閉じられていないことを発見しました 。

とへのすべての呼び出しを変更したgetCurrentSessionimpl。Session-per-requestパターンで開かれたセッションは、作業後に閉じられます。

トランザクションの基本

于 2013-03-25T11:38:43.697 に答える