重命名领域 table

Rename Realm table

我的领域方案中有一个 Gift table。现在我需要将 Gift.class 重命名为 UserBonus.class 并添加一些新参数(不是概率)。正确的做法是什么?

我知道 realm.getTable() 可以 return 我 table,问题是旧的 Gift 存在于模式中但事实上我没有 Gift.class(现在是 UserBonus 并且 getTable() 将 return 我新创建的 table)所以我不能得到旧的礼物 table 价值并将它们移动到新的奖金table.

我看到的唯一方法是留空 Gift.class 并仅将其用于迁移。

感谢任何建议,
雅科夫

目前我是这样实现的:

  • 新增UserBonus.class
  • 将 @Deprecated 添加到 Gift.class
  • Gifttable的所有数据复制到UserBonustable

    // added bonus types
    Table userBonus = realm.getTable(UserBonus.class);
    userBonus.addColumn(ColumnType.STRING, "localId");
    userBonus.addColumn(ColumnType.INTEGER, "type");
    userBonus.addColumn(ColumnType.INTEGER, "date");
    userBonus.addColumn(ColumnType.STRING, "userName");
    userBonus.addColumn(ColumnType.STRING, "userNumber");
    userBonus.addColumn(ColumnType.STRING, "credits");
    
    // move Gift to UserBonus
    RealmResults<Gift> gifts = realm.where(Gift.class).findAll();
    for (Gift gift :gifts) {
        userBonus.add(
                gift.getLocalId(),
                UserBonus.TYPE_FRIEND,
                gift.getDate(),
                gift.getUserName(),
                gift.getUserNumber(),
                gift.getCredits()
        );
    }
    realm.where(Gift.class).findAll().clear();
    

也许我的回答会过时,但是现在在Android上的Realm中有一个方法'rename',可以重命名scheme中的table(模型)。 代码将是这样的:

RealmSchema schema = Realm.getInstance().getSchema();
schema.rename("OldModelName", "NewModelName"); 

它应该有效!

您还可以在迁移中看到所有功能(自 2015 年 6 月 25 日起)- https://github.com/realm/realm-java/pull/1239