1

Hibernate オブジェクトを HTTP セッションに追加したいと考えています。HTTP セッションがクラスター化された環境に参加しており、シリアライゼーションによって複製されている場合。HTTP セッションのシリアル化中に、セッションの範囲外であるため、遅延読み込み例外がスローされます。遅延ロードされていないオブジェクトをシリアライズしようとしないように hibernate に指示する方法があるはずです。結局のところ、これがオブジェクト グラフの状態であり、シリアル化によってオブジェクト グラフの状態がダンプされます。オブジェクトがロードされていないために単なるプロキシである場合は、プロキシのみをシリアル化する必要があります。右?とにかく、それは私が見たいと思っている行動です。これを実現する方法についてのアイデアはありますか?

もちろん、シリアライズされたオブジェクトが別のサーバーでデシリアライズされ、セッションが適切に処理されることが期待されます。

4

1 に答える 1

2

クラスター環境では、HTTP セッションに objectId のみを格納することが必要な場合があります。クラスタ ノードが実際のノードの DB をクエリできるようにします。

もう 1 つのオプションは、Hibernate セッションから Hibernate オブジェクトをデタッチしてシリアライズすることです。(この場合、遅延フィールドを初期化する必要がある場合があります)。遅延ロードされたフィールドを初期化するには、これを使用することができます。

通常、サーバー間でオブジェクトを渡す場合、遅延ロードされたすべてのフィールドを初期化する必要があります。そうしないと、シリアライズ中に例外が発生します。これは、休止状態のセッションをシリアライズ/デシリアライズできないためです。

ええ、HTTP セッションと Hibernate セッションを混在させないでください。これらはまったく別のものです。

于 2013-03-27T21:04:55.670 に答える