2014-03-03 65 views
1

我有一個名爲Foo的DAO。 MongoTemplate想要將其映射到名爲foos的數據庫集合。問題是:如何設置MongoTemplate集合映射

  • 在Mongo中,集合名爲Foos
  • Foo對象來自第三方庫,其所有構造函數都是private

如何配置我的Spring Bean,使得MongoTemplate --via一個MongoItemReader --knows收集Foos映射到我的文檔Foo

如果有幫助,我主要關心的是從 MongoDB讀取數據

+0

的'MongoItemReader'包裝通話'MongoOperations#找到(查詢查詢,類型)'。你是說你真的需要'MongoOperations#find(查詢查詢,類類型,字符串collectionName)'?如果是這樣,這將是SB需要添加的東西。 –

+0

@MichaelMinella:是的,一種解決方法是擴展'MongoTemplate'並暴露允許'collectionName'的方法。我不確定他們爲什麼不公開這些。 –

回答

1

回答:我最終擴展了MongoItemReader併爲collection添加了一個getter/setter。這讓我委託我不關心的內容,並修改doPageRead()設置集合在我的自定義查詢:

@Scope("step") 
public class MyMongoItemReader extends MongoItemReader<Object> { 

    public void setCollection(String collection) { 
     this.collection = collection; 
    } 

    @Override 
    protected Iterator<Object> doPageRead() { 

     ... 
     Query mongoQuery = // set query 
     ... 

     return (Iterator<Object>) // 
      template.find(mongoQuery, Object.class, this.collection).iterator(); 
    } 

}