Realm Sync同步失败:客户端与服务端int、double属性不匹配如何解决
问题原因
情况1报错(基础类型int/double)
你的服务端Schema中int/double类型的字段没有配置"required": true,默认允许为null;但Java基础类型属于不可空类型,Realm会将其识别为非空字段,两端空性不匹配就触发了Schema mismatch错误。
情况2报错(包装类型Integer/Double)
你之前用基础类型运行过应用,本地已经生成了对应字段为非空的Schema缓存,而你的Realm配置默认开启了**仅累加(additive-only)**的Schema迁移模式,这种模式不允许修改已有字段的可空性,因此修改为包装类型后会触发迁移错误。
解决方案
根据业务需求选择以下任意一种路径即可:
路径1:字段设置为不可空(推荐,符合total、数量类字段的业务逻辑)
- 修改服务端Schema,给所有数值类型字段添加
"required": true约束,示例如下:
// total字段修改示例 "total": { "bsonType": "double", "required": true } // invoiceItems下的quantity、unitPrice字段也同步添加该配置
- 客户端仍使用基础类型
int/double定义字段,此时两端字段空性完全对齐。 - 清除本地旧Schema缓存:开发阶段直接卸载重装应用即可;如果是已上线版本,需要关闭additive-only模式,编写Schema迁移脚本将对应字段调整为非空。
路径2:字段允许为null
- 服务端Schema无需修改,客户端使用
Integer/Double包装类型定义字段。 - 清除本地旧Schema缓存:开发阶段直接卸载重装应用即可;如果是已上线版本,需要关闭additive-only模式,编写Schema迁移脚本将对应字段调整为可空。
注意事项
开发阶段调试Schema适配问题时,优先卸载重装应用清除本地Realm缓存,避免旧Schema遗留导致的异常报错。
内容的提问来源于stack exchange,提问作者Menci
相关产品推荐
相关产品推荐

