2

db4o でオブジェクトを遅延ロードする方法があるかどうか疑問に思っていましたか? チュートリアルをすべて読みましたが、この機能は存在しないようです。

私の主張を明確にしましょう。たとえば、50 の複雑なフィールドを持つ House オブジェクトがあるとします。

House
 1) location : Country (complex object)
 2) window : Window (complex object)
 3) livingRoom : Room (complex object)
   .
   .
   .
 50) door : Door (complex object).

私のプログラムの特定の場所で、家の場所だけが必要だとしましょう。db4o のトランスペアレント アクティベーション メカニズムを有効にすると、場所フィールドにアクセスすると、家のオブジェクト全体がアクティブになります。つまり、すべてのフィールドに値が入力されます。他のすべての大きくて複雑なフィールド (この場合は使用しません) はデータベースから無用に取得され、コストがかかるため、これはばかげています。

必要に応じて、オブジェクトを完全にアクティブ化するか、オブジェクトの特定のフィールドのみをアクティブ化するように db4o に指示する方法があればいいのですが。

4

1 に答える 1

0

私が正しく理解していれば、すべての「サブオブジェクト」も Activatable インターフェイスを実装している (そしてもちろん、設定にTransparentActivationSupportを追加した) 場合、db4o の透過的なアクティブ化で目的を達成するのに十分なはずです。

したがって、サンプルでは、​​家がアクティブ化されると、そのすべてのフィールドが非 null になりますが、アクティブ化されません。これらのフィールドにアクセスした場合にのみ、アクティブにする必要があります。

すべてのオブジェクトがアクティブ化されていると思わせるコード (または簡単なテスト) を投稿できますか?

一番

于 2012-07-11T18:43:17.010 に答える