2015-07-05 7 views

Antwort

8

Relam zur Zeit nicht auto_increment

dieses Problem zu sehen, unterstützt auf GitHub

Sie arbeiten rund um ähnliche

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     // increment index 
     Number num = realm.where(dbObj.class).max("id"); 
     int nextID; 
     if(num == null) { 
      nextID = 1; 
     } else { 
      nextID = num.intValue() + 1; 
     } 
     dbObj obj = realm.createObject(dbObj.class, nextID); 
     // ... 
    } 
} 
+1

jedes Update auf das? – ralphgabb

+0

Per cmelchior, "Auto-inkrementierte Tasten funktionieren einfach nicht in einer verteilten Einstellung, also ist es nicht etwas, was wir in der Realm-Bibliothek selbst unterstützen möchten." (https://github.com/realm/realm-java/pull/3875#issuecomment-265435130) – markproxy

1

Die Java-Bindung nicht Primärschlüssel nehmen kann noch nicht unterstützt, aber es ist auf der Roadmap und mit hoher Priorität - siehe: https://groups.google.com/forum/#!topic/realm-java/6hFqdyoH67w . Als Abhilfe können Sie dieses Stück Code zum Erzeugen von Tasten verwenden:

int key; 
try { 
    key = realm.where(Child_pages.class).max("id").intValue() + 1; 
} catch(ArrayIndexOutOfBoundsException ex) { 
key = 0; // when there is no object in the database yet 
} 

Ich benutze singleton factory for generating primary keys als eine generische Lösung mit einer besseren Leistung (keine Notwendigkeit zur Abfrage für max("id") jedes Mal).

Es gibt eine lange Diskussion in Realm Git Hub, wenn Sie mehr Kontext benötigen: Document how to set an auto increment id?

+0

Hallo, bitte, Kann erklären, wie man das Singleton verwendet? Ich habe nur das Wesentliche überprüft, aber ich weiß nicht, wie ich es in meinen Code einfügen soll. –

+0

1. initialisieren Sie es, wenn App mit dem Aufruf von 'PrimaryKeyFactory.getInstance(). Initialize' beginnt, dann können Sie' PrimaryKeyFactory.getInstance(). NextKey' aufrufen, um den nächsten Schlüssel für die angegebene Klasse zu erhalten – zacheusz

+0

So kann ich 'PrimaryKeyFactory.getInstance() hinzufügen. initialisieren "in meiner Anwendung onCreate nur einmal, oder ich sollte es in jeder Klasse hinzufügen, die ich es verwenden möchte? –

Verwandte Themen