Созданная здесь проблема GitHub: https://github.com/MorphiaOrg/morphia/issues/1388
Насколько я понимаю, метод Datastore # merge (object) $ установит все постоянные поля в переданном объекте в базу данных для объекта с соответствующимobjectID.
Для проекта, над которым я работаю, Мне нужно объединить все поля переданного объекта из базы данных. Так что мои переходные поля в моем объекте останутся нетронутыми, и мой объект будет таким же экземпляром - но поля будут обновлены до значений из базы данных ,
или даже если былспособ создания запроса с уже существующим объектом для записи полей из базы данных.
Что-то вроде datastore.createQuery(MyClass.class, myObject)
Интересно, если кто-нибудь знает способ сделать это с текущимРеализация Morphia. По сути, вместо фабрики объектов Morphia, создающей новый экземпляр моего класса для запроса, я хочу, чтобы он использовал мой ранее существующий объект и перезаписывал значения полей.
Мне было интересно, может ли что-то подобноеработа:
public void updateFromNewer(X entity, X update) {
datastore.getMapper().getMappedClass(entity).getPersistenceFields().forEach(mf -> {
mf.setFieldValue(entity, mf.getFieldValue(update));
});
}
, но это кажется грязным.
Мне в основном нужна противоположность этой функции:
datastore.merge(entity);
Вышеприведенный метод $set
- это постоянные поля предоставленной сущности в базе данных.
Никаких ошибок или чего-либо еще, просто не уверен, как это реализовать.
Использование последних версий Morphia & MongoDB.