【问题标题】:Rename Realm table重命名领域表
【发布时间】:2015-09-18 08:49:08
【问题描述】:

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

我知道realm.getTable() 可以将表返回给我,问题是架构中存在旧的Gift,但实际上我没有Gift.class(现在是UserBonusgetTable() 会返回给我新创建的表),所以我无法获取旧的礼物表值并将它们移动到新的奖励表。

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

感谢您的建议,
亚基夫

【问题讨论】:

    标签: java android realm


    【解决方案1】:

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

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

    它应该可以工作!

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

    【讨论】:

      【解决方案2】:

      目前我确实实现了如下:

      • 添加了新的UserBonus.class
      • 将@Deprecated 添加到Gift.class
      • Gift表中的所有数据复制到UserBonus表中

        // 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();
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-26
        • 2017-07-04
        • 2015-07-17
        • 1970-01-01
        • 2012-02-29
        • 2023-03-29
        • 1970-01-01
        • 2017-11-26
        相关资源
        最近更新 更多