0

ソーシャル ネットワークのプロファイルが与えられた場合:

Class Profile {
   String name
   List<Profile> friends

   static hasMany = [friends:Profile]
}

プロファイル A がプロファイル B と友達であり、その逆を想像してみてください。

a.addToFriends(b)
b.addToFriends(a)

次のようなプロファイルをロードするとき

def p = Profile.get(id)

すべてのアソシエーションが任意の深さまでロードされるため、このサイクルによりスタック オーバーフローが発生します。mongodb プラグインは、悪意のある読み込みサイクルを防ぐ遅延読み込みをサポートしていないようです。私の魂は、低レベルの gmongo API を使用し、ObjectID を friends コレクションに保存し、関連付けを ProfileService.getProfileById() メソッドで手動でロードすることです。これは問題なく動作していますが、可能な限り GORM を使用することをお勧めします。今では、可能なサイクルを持つそのようなクラスには GORM をまったく使用できません。mongodb プラグインの遅延読み込みを教える方法はありますか? すでに fetchMode を lazy に設定しようとしましたが、うまくいきませんでした....何かアイデアはありますか?

4

1 に答える 1

0

私の知る限り、Grails 用の MongoDB Gorm プラグインは少なくとも 2 つあります。morphia に基づくものを使用している場合は、 を介して遅延参照を定義できます@Reference(lazy=true)

于 2013-01-04T02:37:28.937 に答える