2
我有一个RealmObject类。我想要同一个类的多个表。我可以在单个Realm(数据库)中执行该操作,还是需要有多个Realm(每个Realm都有一个表)。同一类的多个领域表
如果它必须是多个领域,Realm切换过程有多快?
我有一个RealmObject类。我想要同一个类的多个表。我可以在单个Realm(数据库)中执行该操作,还是需要有多个Realm(每个Realm都有一个表)。同一类的多个领域表
如果它必须是多个领域,Realm切换过程有多快?
我想要多个同一类的表。
那么你有两个合理的方案:
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
顺便说一句,请阅读[这篇文章,部分''我并不真的需要多态性,我只需要多个类别相互略有不同,但共享一些相同的元素“](https://medium.com/ @ Zhuinden /设计这个领域的模式 - 有效和其他领域技巧-feb76c5b6072#.oah921cgf) – EpicPandaForce
@EpicPandaForce不,表的数量是动态的。说它像一个信息渠道。随着时间的推移,越来越多的渠道将被添加。只有这些信息是通过这些渠道是相同的类型。但是有一些限制,它们应该单独存储。 –