Я хочу несколько таблиц одного класса.
Ну у вас есть два разумных варианта:
1.) добавить поле дискриминатор, который определяет, какая «таблица» это текущий экземпляр объекта принадлежит
public class MyObject extends RealmObject {
@PrimaryKey
private String tableAndId;
@Index
private String table;
@Index
private long id;
// getters, setters
}
Тогда вы можете запросить «за столом «:
RealmResults<MyObject> results = realm.where(MyObject.class)
.equalTo(MyObjectFields.TABLE, "tableA")
.findAll();
2.) создать любую таблицу вы хотите динамически с помощью DynamicRealm
и ручного создания схему через RealmSchema
.
DynamicRealm dynamicRealm = DynamicRealm.getInstance(config);
RealmSchema schema = dynamicRealm.getSchema();
RealmObjectSchema objectSchema;
if(!schema.contains("MyObject_Table_A")) {
objectSchema = schema.create("MyObject_Table_A");
objectSchema.addField("id", long.class, FieldAttribute.PRIMARY_KEY);
objectSchema.addField("created", Date.class, FieldAttribute.INDEXED);
//...
} else {
objectSchema = schema.get("MyObject_Table_A");
}
И затем вы можете написать в динамической области:
dynRealm.executeTransaction(new DynamicRealm.Transaction() {
@Override
public void execute(DynamicRealm dynRealm) {
DynamicRealmObject dynObj = dynRealm.where("MyObject_Table_A")
.equalTo("id", id)
.findFirst();
if(dynObj == null) {
dynObj = dynRealm.createObject("MyObject_Table_A", id);
}
dynObj.setDate("created", new Date());
}
});
Вы также можете иметь новую конфигурацию для каждой таблицы, но это звучит как необоснованный вариант, так что я едва хочу упомянуть об этом.
У вас есть определенное число этой таблицы, или 'N' этой таблицы? – EpicPandaForce
BTW, пожалуйста, прочитайте [эту статью, часть '" Мне не нужен полиморфизм, мне просто нужны несколько классов, которые немного отличаются друг от друга, но разделяют одни и те же элементы "') (https://medium.com/ @ Zhuinden/design-the-schema-of-realm-эффективно-и-другие-realm-tips-feb76c5b6072 # .oah921cgf) – EpicPandaForce
@EpicPandaForce Нет, количество таблиц динамическое. Скажите, что это как канал информации. С течением времени будет добавлен все больше каналов. Единственная вещь - информация, поступающая, хотя эти каналы имеют один и тот же тип. Но есть некоторые ограничения, которые они должны хранить отдельно. –