Как правильно мигрировать на встроенные объекты в Realm?

#java #android #realm

#java #Android #realm

Вопрос:

Я хотел бы знать, как правильно перейти на встроенные объекты в обновлении Realm 10.0? Не удалось найти документацию для миграции из обычного класса RealmObject / RealmModel во встроенный класс RealmObject / RealmModel.

Допустим, у меня есть родительский класс и дочерний класс, который подключается к родительскому объекту по идентификатору:

 public class MyParent extends RealmObject {
    @PrimaryKey
    private String id;
    private MyChild child; 
    // other fields...
}
public class MyChild extends RealmObject {
    @PrimaryKey
    private String id;
    private String parentId;
    // other fields...
}
  

Экспериментально я обнаружил, что могу:

  • либо (1a) гарантировать, что каждый объект-кандидат на внедрение в таблице MyChild имеет одного родителя, либо (1b) очистить таблицы моделей
  • затем (2) удалите статус закрытого ключа из частного поля («id») и удалите само поле «id» из MyChild
  • (3) установите статус embedded для класса MyChild.

В коде миграции это выглядит следующим образом:

 realm.delete("MyParent");
realm.delete("MyChild"); // optional; variant (1b) is chosen

schema.get("MyChild")
    .removePrimaryKey()
    .removeField("id");
    
schema.get("MyChild").setEmbedded(true);
  

И это работает.
Я прав?

PS

Ответ №1:

Не знаю, нужно ли это кому-нибудь еще, но это то, что я делаю.

 public class MyParent extends RealmObject {
    @PrimaryKey
    private String id;
    private MyChild child; 
    // other fields...
}

@RealmClass(embedded=true)
public class MyChild extends RealmObject {
    // other fields...
}
  

Тогда при миграции нет необходимости удалять объект. Затем просто удалите поля первичного ключа и идентификатора MyChild

 schema.get("MyChild").setEmbedded(true);