Я использую morphia 0.109 и определил базовый класс следующим образом:
@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)
}
Я ожидаю увидеть значение mongodocversion в документе.
В документации по морфиям представлена следующая информация об аннотации версии:
Это поле будет автоматически управляться для вас - нет необходимости устанавливать значение, и вы все равно не должны этого делать.
@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" );
}
Этот тест в настоящее время проходит по jenkins: https://github.com/mongodb/morphia/blob/master/morphia/src/test/java/org/mongodb/morphia/optimisticlocks/VersionTest.java#L20-20