Как установить сопоставление коллекции MongoTemplate

У меня есть DAO под названием Foo. MongoTemplate хочет сопоставить это с коллекцией базы данных с именем foos. Проблемы:

  • В Mongo коллекция называется Foos.
  • Объект Foo взят из сторонней библиотеки, и все его конструкторы — private.

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

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


person JJ Zabkar    schedule 03.03.2014    source источник
comment
MongoItemReader оборачивает вызов MongoOperations#find(Query query, Class<?> type). Вы хотите сказать, что вам действительно нужен MongoOperations#find(Query query, Class<?> type, String collectionName)? Если да, то это будет что-то, что SB нужно будет добавить.   -  person Michael Minella    schedule 05.03.2014
comment
@MichaelMinella: Да, одним из обходных путей было расширение MongoTemplate и раскрытие метода, который позволяет collectionName. Я не уверен, почему они не разоблачили это.   -  person JJ Zabkar    schedule 05.03.2014


Ответы (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();
    }

}
person JJ Zabkar    schedule 18.03.2014