0
4

1 に答える 1

1

lazy="false"クラス要素で使用する代わりに、コレクションで使用することをお勧めします。つまり、たとえば、Userオブジェクトをフェッチするたびに、toUserSpaceRoleのコレクションが遅延なしとしてマークされているため、コレクションもフェッチされます。

lazy="false"class要素で使用すると、望ましくない結果が発生します。通常、コレクションが上記のように遅延していない場合、コレクション全体は、フェッチ戦略に応じて、join、select、またはsubselectのいずれかを使用してフェッチされます。たとえば、selectストラテジーではUser、dbからaをフェッチすると、hibernateは2つのselectステートメントを発行します。1つはユーザー自体用で、もう1つはコレクション用です。ただし、休止状態は、コレクション内の個々の要素をプロキシすることを選択できます。
を使用lazy="false"すると、hibernateはこれらのオブジェクトをプロキシできず、通常、2つのテーブル間の結合で単一のクエリを使用することになります。それは必ずしも望ましいとは限りません。

ただし、正しいアプローチは、アーキテクチャを調べて、最初に例外が発生した理由を理解することです。すでにセッションを閉じた後、デタッチされたオブジェクト(ここを参照)からプロパティまたはコレクションにアクセスしようとしました。サービスレイヤーを見て、セッションを閉じてオブジェクトを呼び出し元に渡す前に、必要なすべてのデータをフェッチする方法を確認します。

于 2011-05-24T06:08:07.110 に答える