在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的版本注释答案 0 :(得分:1)
那么有没有办法明确设置版本?或者忽略单个请求的版本限制?
您可以(当然)在实体上执行dao.refresh(...)
以在更新之前从实体获取最新版本。这是最有可能的事情。
但是,作为一个hack,如果你需要专门更改版本,那么你可以创建两个实体,它们都转到同一个表。其中一个实体的version
字段为version=true
,另一个则不具有。然后,您可以使用非特殊version
字段直接更新字段。