1

私が目にする以前の多くの質問のトピックですが、これほどではありません。Hibernates の遅延フェッチ戦略、open-session-in-view などは理解していますが、私の関連付けが何があっても遅延フェッチされる、この単純な小さなことに対する解決策を見つけることができないようです。

私のWebアプリはそれなしで構築されており、現在「移行」するのが複雑になっているため、ビューでオープンセッションを使用していません...

a <- b <- c <- d -> eなどの参照のチェーンがあるとしましょう
。たいていの場合、 a をフェッチすると、 b、c、およびdが必要になります。したがって、これらは常に熱心にフェッチされるように設定されています (lazy=false休止状態のマッピング ファイルで指定することにより)。これは機能します!!

ただし、 d がフェッチされるたびに、関連付けeを常に熱心にフェッチする必要もあります。eはdに対していくつかの論理演算を実行するために重要であるため。

そして、これが機能を停止する場所です... eは、dの多対1の関連付けとしてdに関連付けられています。これを に設定してlazy=falseもうまくいかず、まだ適切に初期化されておらず、dからeのプロパティにアクセスすると LazyInitialisationException が発生します。

これがうまくいくと期待するのは間違っていますか?lazy プロパティは、hibernate v. 3.2.6 および Spring バージョン 2.5.6 を使用して hbm ファイルで指定されます。

誰かが私のために物事を明確にしてくれることを願っています...

是非、別の投稿を見つけたら参考にしてみてください。これをカバーするものが見つからないようです...

4

1 に答える 1

3

多対一の関連付けの遅延属性は、class 要素で設定されます。

<class name="E" laze="false">
...
</class>

<class name="D">
  <many-to-one name="e" .../>
</class>

多対 1 の遅延属性は、任意のプロパティと同じ意味を持ちます。所有者自体がプロキシである場合にのみ機能する、単一のプロパティの遅延読み込みを許可します。これはあなたのケースで使用できるものではなく、とにかくデフォルトで false に設定されています。

于 2011-09-28T14:18:20.530 に答える