我有一个 RealmObject 类。我想要同一类的多个表。我可以在单个 Realm (数据库)中执行此操作还是需要多个 Realm (每个 Realm 一个表)。
如果必须是多个Realm,Realm切换的过程要多快?
最佳答案
I want multiple tables of the same class.
那么你有两个合理的选择:
1.) 添加一个鉴别器字段,用于确定当前对象实例属于哪个“表”
public class MyObject extends RealmObject {
@PrimaryKey
private String tableAndId;
@Index
private String table;
@Index
private long id;
// getters, setters
}
然后你可以查询“per table”:
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");
}
然后你可以写入动态 Realm :
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());
}
});
您还可以为每个表配置一个新配置,但这听起来像是一个不合理的选择,所以我什至不想提及它。
关于android - 同一类的多个 Realm 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40542762/