Морфий. Как клонировать запрос с другой коллекцией (вид) - PullRequest
0 голосов
/ 29 февраля 2012

Проблема заключается в поиске по запросу в разных коллекциях.

В интерфейсе 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 Ответ

1 голос
/ 06 марта 2012

На данный момент это выглядит как хорошее решение. Вы не можете изменить базовую коллекцию / вид после создания запроса - он неизменен.

Если вы хотите эту функциональность, вам потребуется реализовать оператор глубокого клонирования для Query / QueryImpl или запрос, который будет выполнен в morphia .

...