私は現在、Hibernateで最初の一歩を踏み出そうとしていますが、残念ながら、「セッションバウンド」が何を意味するのか実際にはわかりません。
一時的なオブジェクトがあるとしましょう。永続化されると、IDを持つだけでなく、「セッションバウンド」にもなります。しかし、なぜそれは言及する価値があるのでしょうか?
Hibernate のセッションはトランザクションと密接に関連しており、一次キャッシュとしても機能します。オブジェクトを読み取ったり保存したりするたびに、オブジェクトは現在のセッションに自動的にバインドされます (したがって、L1 キャッシュに配置されます)。
最も重要なことは、オブジェクトがセッションにバインドされている限り:
リレーションシップの遅延読み込みを利用できます (そうしないと、恐ろしい結果が得られますLazyInitializationException
)。
その時点以降のこのオブジェクトへのすべての変更は、基になるデータベースに自動的に入力されます。オブジェクトがセッションにバインドされている限り、手動で永続化する必要はありません。
また、春に見られるようなトランザクション管理レイヤーを使用する場合、通常、最も外側のトランザクションがコミットされると、セッションがなくなることに注意してください。
public class MyRep implements Rep {
@Transactional
public MyObject findMyObject(..) { ... }
}
したがって、春にトランザクション管理を有効にして、まだトランザクションに参加していないと仮定すると、次のようになります。
MyObject o = rep.findMyObject(...);
このメソッドが終了するまでに、オブジェクトはセッションにバインドされなくなります (スプリングがセッションを閉じたため)。これを克服する方法はいくつかありますが、ここでは触れません。