2015-02-04 2 views
1

Я использую морфий 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; 
} 

который я считаю, я придерживаясь тоже. Я попытался выполнить следующие исправления без успеха:

  1. Перемещение аннотации версии в дочернем классе.
  2. Удаление «частного» объявления параметра версии.

Любые советы были бы весьма полезными.

Изменить, чтобы добавить: спасбросков процесс я использую:

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"); 
} 

ответ

1

Этот тест в настоящее время проходит на Дженкинс: https://github.com/mongodb/morphia/blob/master/morphia/src/test/java/org/mongodb/morphia/optimisticlocks/VersionTest.java#L20-20

+0

Спасибо за ссылку, я буду исследовать дальше и размещать назад. – MarcF

+0

Я прошел тесты и определил несколько отличий, особенно вы используете dataStore, тогда как я использую коллекцию для сохранения. Я обновил свой вопрос, чтобы включить процедуру сохранения. Не могли бы вы сказать мне, может ли это быть разницей? – MarcF

+0

Вы полностью обходите механизм сохранения морфий. Как вы думаете, что морфия может применить свою логику в этом случае? * Почему ты так делаешь? 'datastore.save()' должен делать то, что вы хотите. – evanchooly

Смежные вопросы