2014-03-03 3 views
1

У меня есть DAO под названием Foo. MongoTemplate хочет отобразить это в базе данных базы данных по имени foos. Возможны следующие проблемы:Как установить картографирование коллекции MongoTemplate

  • В Монго коллекция насчитывает Foos.
  • Объект Foo поставляется со сторонней библиотеки, и все его конструкторы: private.

Как настроить мою Spring Beans такие, что MongoTemplate --via MongoItemReader --knows коллекции Foos карты для моего документа Foo?

Если это помогает, я в первую очередь интересуюсь чтением данных от MongoDB.

+0

Параметр 'MongoItemReader' оборачивает вызов' MongoOperations # найти (запроса Query, класса типа) '. Вы говорите, что вам действительно нужен «MongoOperations # find» (Query query, Class type, String collectionName) '? Если это так, это будет что-то, что нужно добавить SB. –

+0

@MichaelMinella: Да, одно обходное решение расширяет «MongoTemplate» и раскрывает метод, который позволяет «collectionName». Я не знаю, почему они этого не выразили. –

ответ

1

Ответ: Я закончил работу MongoItemReader и добавил геттер/сеттер для collection. Это позволило мне передать вещи я не заботиться о том, и изменить 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(); 
    } 

} 
Смежные вопросы