1
我使用嗎啡0.109和定義一個基類如下:當我保存ItemTest到MongoDB的實例嗎啡@Version不工作
@Entity
public abstract class MorphiaData {
@Id protected ObjectId objectId;
@Version private Long mongodocversion;
}
和預期嗎啡實體
public class ItemTest extends MorphiaData {
public Long testValue;
}
該文件如下:
{
"_id" : ObjectId("54d26ed66aca89c0717e8936"),
"className" : "test.ItemTest",
"testValue" : NumberLong(1423077078)
}
我期待看到值爲mon godocversion在文檔中。
的嗎啡文檔提供關於版本註釋以下信息:
此字段將自動爲您管理 - 沒有必要 設置一個值,你不應該這樣做呢。
@Entity
class MyClass {
...
@Version Long v;
}
,我相信我也堅持。我嘗試了以下修復但未成功:
- 在子類中移動版本註釋。
- 刪除version參數的'private'聲明。
任何意見將不勝感激。
編輯補充:在我使用的保存過程:
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
你完全繞過了morphia的保存機制。你如何認爲嗎啡在這種情況下可以應用其邏輯? *爲什麼*你是這樣做的? 'datastore.save()'應該做你想做的事。 – evanchooly