0

问题在于通过查询在不同的集合中进行搜索。

接口中有一个方法AdvancedDatastore

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

但它只使用给定的 baseQuery 创建查询,我需要 Query 的完整克隆但具有不同的 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 回答