重命名领域表

时间:2015-09-18 08:49:09

标签: java android realm

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

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

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

感谢您的任何建议,
Yakiv

2 个答案:

答案 0 :(得分:4)

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

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

它应该有效!

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

答案 1 :(得分: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();