openSession:を呼び出すとSessionFactory.openSession、常に新しいSessionオブジェクトが作成され、渡されます。
これらのセッションオブジェクトを明示的にフラッシュして閉じる必要があります。
セッションオブジェクトはスレッドセーフではないため、マルチスレッド環境ではリクエストごとに1つのセッションオブジェクトを作成し、Webアプリケーションでもリクエストごとに1つのセッションを作成する必要があります。
getCurrentSession:を呼び出すとSessionFactory.getCurrentSession、Hibernateコンテキストにあり、Hibernateによって内部的に管理されるセッションオブジェクトが提供されます。トランザクションスコープにバインドされています。
を呼び出すとSessionFactory.getCurrentSession、Session存在しない場合は新しいセッションが作成されます。それ以外の場合は、現在の休止状態のコンテキストにある同じセッションが使用されます。トランザクションが終了すると、自動的にセッションをフラッシュして閉じます。そのため、外部で行う必要はありません。
シングルスレッド環境でhibernateを使用getCurrentSessionしている場合は、毎回新しいセッションを作成するよりもパフォーマンスが速いため、を使用できます。
メソッドを使用するには、以下のプロパティをhibernate.cfg.xmlに追加する必要がありますgetCurrentSession。
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">
thread
</property>
</session-factory>
openSession()やを呼び出していませんclose()。彼は電話するだけgetCurrentSession()です。私は彼がに設定current_session_contextすると思いますthread。今、私は理解してgetCurrentSession()いると思います。ただし、をいつ使用すればよいかわかりませんopenSession()。