2012-02-29 26 views
0

問題是關於通過查詢在不同集合中進行搜索。Morphia。如何克隆不同集合的查詢(種類)

有一個在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; 
    } 

更新

正常工作與反思,但我不喜歡,因爲性能比較的這種骯髒的方式。

回答

1

這看起來像是一個很好的解決方案。一旦查詢被創建,你就不能改變底層集合/類型 - 它是不可變的。

如果您希望使用此功能,則需要爲Query/QueryImpl或morphia中的請求實現深層克隆操作。