0

次のようにマッピングにセットがあります。

<set name="Persons" cascade="all"  inverse="true" lazy="true">
  <key column="idDepartment" />
  <one-to-many class="Person" />
</set>

子を遅延ロードしたいのですpersonsが、persons クラスには多くの列があるため、常にデータ サイズが非常に大きくなります。のような 1 つの列だけを遅延ロードしたい場合personid、どうすればよいでしょうか?

4

2 に答える 2

1

デフォルトではいいえ、できません。

2 つのオプションがあります。ほとんど必要としないすべてのプロパティを遅延読み込みとしてマークします。次に、エンティティはプロパティのサブセットでフェッチされますが、他のエンティティは後でフェッチされます。しかし、これは全体的なパフォーマンスを著しく損なう可能性があります。

2 番目のオプションは、必要な正確な列を取得するために別のクエリを発行することです。Nhiberante には projectins があり、LINQ を使用することもできます。

于 2012-09-11T07:55:18.177 に答える
0

数人の人物のみをロードする必要があるユース ケースの場合は、lazy="extra" の使用を検討できます。

また、Person の設計に疑問を呈することもできます。おそらく、より具体的で詳細なデータへの参照を含む、より小さな Person エンティティが有益でしょうか?

もう 1 つのオプションは、単純に Department.Persons コレクションを持たないことです。コレクションが大きく、コレクションの所有者がコレクション内のアイテムを実際には所有していない場合など、そのようなコレクションを避ける傾向があることがわかりました。

于 2012-09-11T10:26:32.487 に答える