3

私は現在、Hibernateで最初の一歩を踏み出そうとしていますが、残念ながら、「セッションバウンド」が何を意味するのか実際にはわかりません。

一時的なオブジェクトがあるとしましょう。永続化されると、IDを持つだけでなく、「セッションバウンド」にもなります。しかし、なぜそれは言及する価値があるのでしょうか?

4

2 に答える 2

4

Hibernate のセッションはトランザクションと密接に関連しており、一次キャッシュとしても機能します。オブジェクトを読み取ったり保存したりするたびに、オブジェクトは現在のセッションに自動的にバインドされます (したがって、L1 キャッシュに配置されます)。

最も重要なことは、オブジェクトがセッションにバインドされている限り:

  • リレーションシップの遅延読み込みを利用できます (そうしないと、恐ろしい結果が得られますLazyInitializationException)。

  • その時点以降のこのオブジェクトへのすべての変更は、基になるデータベースに自動的に入力されます。オブジェクトがセッションにバインドされている限り、手動で永続化する必要はありません。

于 2012-05-20T20:00:55.670 に答える
1

また、春に見られるようなトランザクション管理レイヤーを使用する場合、通常、最も外側のトランザクションがコミットされると、セッションがなくなることに注意してください。

public class MyRep implements Rep {
   @Transactional
   public MyObject findMyObject(..) { ... }
}

したがって、春にトランザクション管理を有効にして、まだトランザクションに参加していないと仮定すると、次のようになります。

MyObject o = rep.findMyObject(...);

このメソッドが終了するまでに、オブジェクトはセッションにバインドされなくなります (スプリングがセッションを閉じたため)。これを克服する方法はいくつかありますが、ここでは触れません。

于 2012-05-21T01:26:31.713 に答える