类型迁移后 ObjectBox 不保留以前的值
ObjectBox does not keep previous values after type migration
我们必须将实体中的一个字段参数从 long
迁移到 BigDecimal
。迁移很顺利,但是有一个问题;我们希望将以前的值设置为迁移的字段。但是一旦 ObjectBox
被初始化,它会将迁移字段默认为当前类型的默认值,在我们的例子中,为 null
.
假设我们有:
Id (long)
Name
123
Random Name
迁移后我们得到:
Id (String)
Name
null
Random Name
有没有可能在不丢失已迁移字段值的情况下进行迁移?
旁注:我使用转换器来保留 BigDecimal
值,因为 ObjectBox
不支持 BigDecimal
转换器 class:
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;
ObjectBox does not support migrating existing property data to a new type. You will have to take care of this yourself, e.g. by keeping the old property and adding some migration logic.
来源:https://docs.objectbox.io/advanced/data-model-updates#changing-property-types
@Farid 手动迁移可能看起来像这样:
- 向模型添加一个新字段,使用您要使用的新类型,例如
newField
- 添加更新所有对象的代码,读取
oldField
并将适当的值写入 newField
- 从模型中删除
oldField
,现在所有数据都已迁移
- 您可以选择 follow the docs on how to rename
newField
任何您想要的
遗憾的是,ObjectBox 不支持保留旧数据的类型迁移。
我们必须将实体中的一个字段参数从 long
迁移到 BigDecimal
。迁移很顺利,但是有一个问题;我们希望将以前的值设置为迁移的字段。但是一旦 ObjectBox
被初始化,它会将迁移字段默认为当前类型的默认值,在我们的例子中,为 null
.
假设我们有:
Id (long) | Name |
---|---|
123 | Random Name |
迁移后我们得到:
Id (String) | Name |
---|---|
null | Random Name |
有没有可能在不丢失已迁移字段值的情况下进行迁移?
旁注:我使用转换器来保留 BigDecimal
值,因为 ObjectBox
不支持 BigDecimal
转换器 class:
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;
ObjectBox does not support migrating existing property data to a new type. You will have to take care of this yourself, e.g. by keeping the old property and adding some migration logic.
来源:https://docs.objectbox.io/advanced/data-model-updates#changing-property-types
@Farid 手动迁移可能看起来像这样:
- 向模型添加一个新字段,使用您要使用的新类型,例如
newField
- 添加更新所有对象的代码,读取
oldField
并将适当的值写入newField
- 从模型中删除
oldField
,现在所有数据都已迁移 - 您可以选择 follow the docs on how to rename
newField
任何您想要的
遗憾的是,ObjectBox 不支持保留旧数据的类型迁移。