微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类型迁移后,ObjectBox 不保留以前的值

如何解决类型迁移后,ObjectBox 不保留以前的值

我们不得不将实体中的一个字段参数从 long 迁移到 BigDecimal。迁移很顺利,但有一个问题;我们希望保留以前的值设置为迁移的字段。但是一旦 ObjectBox 被初始化,它会将迁移字段认为当前类型的认值,在我们的例子中为 null

假设我们有:

Id(长) 姓名
123 随机名称

迁移后我们得到:

Id(字符串) 姓名
随机名称

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

附注:我使用转换器来保留 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 手动迁移可能看起来像这样:

  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

,

ObjectBox 不支持将现有属性数据迁移到新类型。你必须自己处理这个,例如通过保留旧属性并添加一些迁移逻辑。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。