#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
- Информация и примеры о PR для встроенных объектов: https://github.com/realm/realm-java/pull/6730
- Документация по встроенным объектам: https://docs.mongodb.com/realm/android/embedded-objects /
Ответ №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);