2016-11-11 3 views
2

Ich habe eine RealmObject-Klasse. Ich möchte mehrere Tabellen der gleichen Klasse. Kann ich das in einem einzigen Realm (Datenbank) machen oder brauche ich mehrere Realms (Eine Tabelle pro Realm).Mehrere Realm-Tabellen der gleichen Klasse

Wenn es mehrere Realms sein muss, wie schnell ist der Realm-Switching-Prozess?

+0

Haben Sie eine bestimmte Nummer dieser Tabelle oder "N" dieser Tabelle? – EpicPandaForce

+0

BTW bitte lesen [diesen Artikel, Teil '" Ich brauche nicht wirklich Polymorphismus, ich brauche nur mehrere Klassen, die leicht voneinander abweichen, aber einige der gleichen Elemente teilen "'] (https://medium.com/ @ Zhuinden/Designing-the-Schema-of-Realm-effektiv-und-anderen-Bereich-Tipps-feb76c5b6072 # .oah921cgf) – EpicPandaForce

+0

@EpicPandaForce Nein, die Anzahl der Tabellen sind dynamisch. Sage es wie ein Informationskanal. Mehr und mehr Kanäle werden im Laufe der Zeit hinzugefügt. Die einzige Information ist, dass diese Kanäle vom selben Typ sind. Aber es gibt einige Einschränkungen, dass sie getrennt gespeichert werden sollten. –

Antwort

1

Ich möchte mehrere Tabellen der gleichen Klasse.

Nun haben Sie zwei vernünftige Optionen:

1.) fügen Sie ein Feld, das Scheidungs ​​

public class MyObject extends RealmObject { 
    @PrimaryKey 
    private String tableAndId; 

    @Index 
    private String table; 

    @Index 
    private long id; 

    // getters, setters 
} 

gehört Dann können Sie pro Tabelle abfragen“, die„Tabelle“diese aktuelle Objektinstanz bestimmt „:

RealmResults<MyObject> results = realm.where(MyObject.class) 
             .equalTo(MyObjectFields.TABLE, "tableA") 
             .findAll(); 

2.) erstellen jede Tabelle, die Sie dynamisch DynamicRealm und manuelle Erstellung wollen mit der das Schema über die 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"); 
} 

Und dann können Sie in den dynamischen Bereich schreiben:

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()); 
    } 
}); 

Sie können auch eine neue Konfiguration pro Tisch, aber das klingt wie eine unzumutbare Option, so dass ich kaum noch wollen um es zu erwähnen.

Verwandte Themen