-1

我们必须将实体中的一个字段参数从 迁移longBigDecimal. 迁移很顺利,但是有问题;我们希望将以前的值设置为迁移的字段。但是一旦ObjectBox被初始化,它会将 migrated 字段默认为当前类型的默认值,在我们的例子中为null.

假设我们有:

标识(长) 姓名
123 随机名称

迁移后我们得到:

标识(字符串) 姓名
无效的 随机名称

是否有任何可能的迁移方式而不会丢失已迁移字段的值?

附注:我使用转换器来保留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;
4

3 回答 3

0

ObjectBox 不支持将现有属性数据迁移到新类型。您必须自己解决这个问题,例如保留旧属性并添加一些迁移逻辑。

资料来源:https ://docs.objectbox.io/advanced/data-model-updates#changeing-property-types

于 2021-03-30T05:15:16.030 回答
0

@Farid 手动迁移可能看起来像这样:

  1. 向模型添加一个新字段,使用您要使用的新类型,例如newField
  2. 添加更新所有对象的代码,读取oldField和写入适当的值newField
  3. 从模型中删除oldField,现在所有数据都已迁移
  4. 可选地,您可以按照文档了解如何重命名 newField为您想要的任何内容
于 2021-04-09T13:26:47.623 回答
0

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

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

于 2021-04-09T13:40:57.223 回答