1

私にはたくさんの別々の関数があり、それらのそれぞれのtransaction.commit()でsession.clear()を実行して、一種のメモリを解放する必要があります。

私は間違っているかもしれませんが、hibernateのsession.clear()はtransaction.commit()のデフォルトでは呼び出されないと思います。

session.clear()を実行せずに、transaction.commit()ごとに自動セッションクリアを実行するようにhibernateを構成できる方法があるかどうかを知りたいですか?

上記の問題に対する他の解決策をいただければ幸いです。

4

1 に答える 1

2

これは、トランザクションごとのセッションパターンと呼ばれます。トランザクションの開始時にセッションを作成し、コミット後にセッションを閉じます(特に、接続プールを使用する場合は、セッションをクリーンアップしてトランザクションをコミットすると、セッションを閉じるのとほぼ同じ効果があります)。 。

スタンドアロン環境でHibernateを使用する場合は、でコンテキストセッションを構成する必要がありますhibernate.current_session_context_class = thread。この場合、コンテキストセッション(によって取得されるgetCurrentSession())は、トランザクションのコミット時に自動的に閉じられます。

EJBまたはSpringFrameworkを使用する場合は、これらのフレームワークによって提供されるトランザクション管理機能を使用できます。彼らはこのパターンもサポートしています。

于 2013-02-19T08:05:50.383 に答える