1
ThreadLocal<Session> tl = new ThreadLocal<Session>();
    tl.set(session);

セッションを受けるには、

  Employee emp = (Employee)((Session)tl.get().get(Employee.class, 1));

アプリケーションが Web ベースの場合、Web コンテナーは要求ごとに個別のスレッドを作成します。これらすべてのリクエストが同じ単一の Session オブジェクトを同時に使用すると、データベース操作で望ましくない結果が得られるはずです。上記の結果を克服するには、セッションの同時使用を許可しない threadLocal オブジェクトにセッションを設定することをお勧めします。それが正しければ、アプリケーションのパフォーマンスは非常に低くなるはずです。上記のシナリオでの適切なアプローチは何ですか。私が間違った方向に進んでいる場合、その状況では ThreadLocal を使用する必要があります。私は冬眠するのが初めてです。このタイプの質問がばかげている場合はご容赦ください。前もって感謝します。

4

2 に答える 2

2

を使用することを余儀なくされているかどうかはわかりませんThreadLocalThreadLocal特に春と一緒に休止状態を使用している場合は、セッションオブジェクトを保存するために使用することは間違いなく良い考えではありません。

Spring で Hibernate を使用するための典型的なスキームは次のとおりです。

  1. sessionFactoryDAO に を挿入します。プールされた datasourcesessionFactoryによってサポートされているものを既に構成していると仮定します。

  2. DAO クラスでは、次のようにセッションにアクセスできます。

    Session session = sessionFactory.getCurrentSession();

関連記事へのリンクはこちら。

この例は Hiberante 3.x API に固有のものであることに注意してください。これにより、セッションの作成/閉鎖/スレッドセーフの側面が内部的に処理され、きちんとしたものになります。

于 2013-07-24T13:19:27.317 に答える