如何解决类型迁移后,ObjectBox 不保留以前的值
我们不得不将实体中的一个字段参数从 long
迁移到 BigDecimal
。迁移很顺利,但有一个问题;我们希望保留以前的值设置为迁移的字段。但是一旦 ObjectBox
被初始化,它会将迁移字段默认为当前类型的默认值,在我们的例子中为 null
。
假设我们有:
迁移后我们得到:
是否有任何可能的迁移方式不会丢失迁移字段的值?
附注:我使用转换器来保留 BigDecimal
值,因为 ObjectBox
不支持 BigDecimal
转换器类:
public class BigIntegerStringConverter implements PropertyConverter<BigInteger,String> {
@Override
public BigInteger convertToEntityProperty(String databaseValue) {
return databaseValue == null ? null : new BigInteger(databaseValue);
}
@Override
public String convertToDatabaseValue(BigInteger entityProperty) {
return String.valueOf(entityProperty);
}
}
用法:
@Convert(converter = BigIntegerStringConverter.class,dbType = String.class)
@Uid(XXXXXXXX)
BigInteger tigerId;
解决方法
@Farid 手动迁移可能看起来像这样:
- 向模型添加一个新字段,使用您要使用的新类型,例如
newField
- 添加更新所有对象的代码,读取
oldField
并将适当的值写入newField
- 从模型中删除
oldField
,现在所有数据都已迁移 - 可选地,您可以follow the docs on how to rename
newField
到您想要的任何内容
遗憾的是,ObjectBox 不支持保留旧数据的类型迁移。
参考:https://github.com/objectbox/objectbox-java/issues/971
,ObjectBox 不支持将现有属性数据迁移到新类型。你必须自己处理这个,例如通过保留旧属性并添加一些迁移逻辑。
来源:https://docs.objectbox.io/advanced/data-model-updates#changing-property-types
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。