Я использую морфий 0,109 и определили базовый класс следующим образом:Morphia @version не работает
@Entity
public abstract class MorphiaData {
@Id protected ObjectId objectId;
@Version private Long mongodocversion;
}
И предполагаемый морфий сущность
public class ItemTest extends MorphiaData {
public Long testValue;
}
Когда я сохранить экземпляр ItemTest в MongoDB документ выглядит следующим образом:
{
"_id" : ObjectId("54d26ed66aca89c0717e8936"),
"className" : "test.ItemTest",
"testValue" : NumberLong(1423077078)
}
Я ожидал увидеть значение мон godocversion в документе.
морфий документация содержит следующую информацию о версии аннотацию:
Это поле будет автоматически управляется для вас - нет необходимости установить значение, и вы не должны делать это в любом случае.
@Entity
class MyClass {
...
@Version Long v;
}
который я считаю, я придерживаясь тоже. Я попытался выполнить следующие исправления без успеха:
- Перемещение аннотации версии в дочернем классе.
- Удаление «частного» объявления параметра версии.
Любые советы были бы весьма полезными.
Изменить, чтобы добавить: спасбросков процесс я использую:
DBObject document = MongoDbFactory.getMorphia().toDBObject(this);
DB db = MongoDbFactory.getClient();
DBCollection coll = db.getCollection(noSqlCollection.toString());
if (this.objectId != null) {
//This is an update
BasicDBObject searchQuery = new BasicDBObject().append("_id", this.objectId);
coll.update(searchQuery, document);
} else {
//This is just an add
coll.insert(document);
this.objectId = (ObjectId)document.get("_id");
}
Спасибо за ссылку, я буду исследовать дальше и размещать назад. – MarcF
Я прошел тесты и определил несколько отличий, особенно вы используете dataStore, тогда как я использую коллекцию для сохранения. Я обновил свой вопрос, чтобы включить процедуру сохранения. Не могли бы вы сказать мне, может ли это быть разницей? – MarcF
Вы полностью обходите механизм сохранения морфий. Как вы думаете, что морфия может применить свою логику в этом случае? * Почему ты так делаешь? 'datastore.save()' должен делать то, что вы хотите. – evanchooly