问题在于通过不同集合中的查询进行搜索。
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;
}
更新
反射效果很好,但由于性能不好,我不喜欢这种肮脏的方式。
答案 0 :(得分:1)
现在看来这是一个很好的解决方案。
,一旦创建了查询,就无法更改基础集合/种类。如果您需要此功能,则需要为Query / QueryImpl实现深度克隆运算符,或者请求在morphia中完成。