1. ホーム
  2. java

[解決済み] HibernateのopenSession()とgetCurrentSession()の比較

2022-06-26 13:42:10

質問

JSPのWebアプリケーションでHibernateを使用することについて、いくつか質問があります。

  1. の値はどうすればよいのでしょうか? hibernate.current_session_context_class ?

  2. では、次のどの文言を使うべきでしょうか?また、その理由は?

     Session s = HibernateUtil.getSessionFactory().openSession();
     Session s = HibernateUtil.getSessionFactory().getCurrentSession()
    
    
  3. 最後に、「Webアプリごとに1セッション」と「リクエストごとに1セッション」はどちらが良いですか?

どのように解決するのですか?

このフォーラムで説明されているように ポスト のように、1.と2.は関連しています。もしあなたが hibernate.current_session_context_class をスレッドに設定し、セッションをオープンするサーブレットフィルタのようなものを 実装すれば、他のどこからでもそのセッションにアクセスすることができます。 SessionFactory.getCurrentSession() .

SessionFactory.openSession() は常に新しいセッションを開き、操作を終えたら閉じなければなりません。 SessionFactory.getCurrentSession() はコンテキストにバインドされたセッションを返します - これを閉じる必要はありません。

SpringやEJBを使用してトランザクションを管理している場合、トランザクションと一緒にセッションをオープン/クローズするように設定することができます。

決して one session per web app - セッションはスレッドセーフなオブジェクトではないので、複数のスレッドで共有することはできません。常に1つのリクエストにつき1つのセッション、または1つのトランザクションにつき1つのセッションを使用する必要があります。