类型迁移后 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 手动迁移可能看起来像这样:

  1. 向模型添加一个新字段,使用您要使用的新类型,例如newField
  2. 添加更新所有对象的代码,读取 oldField 并将适当的值写入 newField
  3. 从模型中删除 oldField,现在所有数据都已迁移
  4. 您可以选择 follow the docs on how to rename newField 任何您想要的

遗憾的是,ObjectBox 不支持保留旧数据的类型迁移

参考:https://github.com/objectbox/objectbox-java/issues/971