在ORMLite中显式设置版本字段

时间:2014-07-01 15:39:15

标签: android ormlite

在Android上使用ORMLite我们使用版本注释,以便将修改后的字段用作版本状态。但是,我们的客户端/服务器同步机制的工作方式是服务器告诉我们对象何时发生了变化(因为用户可能在不同的平台/设备上更改了对象)并为我们提供了更新的对象。

现在出现问题:

假设我有以下代码来更新给定文档:

Document newDoc = new Document(jsonDocument);
Document oldDoc = ormDBhelp.getDocumentDao().queryForId(newDoc.getfId());
Document.transplantLocalFields(oldDoc, newDoc);
ormDBhelper.getDocumentDao().update(newDoc);

此更新命令失败,因为我们的newDoc已经有一个较新的修改字段(因此WHERE版本=当前版本约束失败)。现在有人可以争辩说newDoc.modified=oldDoc.modified并让它用本地客户端的当前日期更新。但这是错误的,因为实际修改日期不是我们在本地数据库中持久化的时刻,而是在服务器上修改它的时候。

那么有没有办法明确设置版本?或者忽略单个请求的版本限制?

提前thx!也许我只是监督一些事情,或者我们只需手动管理版本字段并完全省略ORMLite的版本注释

1 个答案:

答案 0 :(得分:1)

  

那么有没有办法明确设置版本?或者忽略单个请求的版本限制?

您可以(当然)在实体上执行dao.refresh(...)以在更新之前从实体获取最新版本。这是最有可能的事情。

但是,作为一个hack,如果你需要专门更改版本,那么你可以创建两个实体,它们都转到同一个表。其中一个实体的version字段为version=true,另一个则不具有。然后,您可以使用非特殊version字段直接更新字段。