0

問題は、さまざまなコレクションでのクエリによる検索に関するものです。

インターフェイスにはメソッドがありAdvancedDatastoreます:

<T> Query<T> createQuery(String kind, Class<T> clazz, DBObject q);

ただし、指定された baseQuery を使用してクエリを作成するだけであり、クエリの完全なクローンが必要ですが、DBCollection フィールドが異なります。助言がありますか?

クエリを変換する私の方法は次のとおりです。

public Query<Vacancy> convertQuery(Query<T> query) {
        QueryImpl<T> queryImpl = (QueryImpl<T>) query;
        DBObject dbO = queryImpl.getQueryObject();
        Query<T> our_query = ((AdvancedDatastore)this.getDatastore()).createQuery("AnotherCollectionName", T.class, dbO);           
        return our_query;
    }

アップデート

リフレクションでは問題なく動作しますが、パフォーマンスのためにこの汚い方法は好きではありません。

4

1 に答える 1

1

それは今のところ良い解決策のように見えます。クエリが作成されると、基になるコレクション/種類を変更することはできません。これは不変です。

この機能が必要な場合は、Query /QueryImplのディープクローン演算子を実装するか、morphiaで実行するように要求する必要があります。

于 2012-03-05T21:29:07.193 に答える