ストアユーザー通知用に設計されたクラス階層があります。
@Document
public class Notification<T> {
@Id
private String id;
@DBRef
private T tag;
...
}
@Document
public class NotificationA extends Notification<WrappedA> {
}
@Document
public class NotificationB extends Notification<WrappedB> {
}
...
これは、多態的な配列を返すのに役立ち、「タグ」フィールドにあらゆる種類のデータを格納できます。問題は、ラップされたオブジェクトに@DBRefフィールドが含まれている場合に始まります。
@Document
public class WrappedA {
@Id
private String id;
@DBRef
private JetAnotherClass referenced;
...
}
「タグ」のフィールドでのクエリは正常に機能します。
db.NotificationA.find( {"tag.$id": ObjectId("507b9902...32a")} )
しかし、JetAnotherClassのフィールド(2つのレベルの@DBRefフィールド)を照会する必要があります。ドット表記とサブオブジェクトを試しましたが、nullが返されます。
ドット表記:
db.NotificationA.findOne( {"tag.$referenced.$id": ObjectId("508a7701...29f")} )
サブオブジェクト:
db.NotificationA.findOne( {"tag.$referenced": { "_id": ObjectId("508a7701...29f") }} )
何か助けはありますか?前もって感謝します!