Realm und Autoinkrement Verhalten (Android)
Ich versuche, Daten aus Reich über eine ID als Referenz. Allerdings, wenn Sie Abfragen für eine ID habe ich herausgefunden, dass Reich ist, dass Sie mir die gleiche ID für alle Elemente (ID 0). Warum nicht die ID-auto-increment-wenn ich den @PrimaryKey
annotation auf die model ID?
Hier ist die verkürzte Klasse für das Modell:
public class Child_pages extends RealmObject {
@PrimaryKey
private int id_cp;
private int id;
private String day;
private int category_id;
Und die Abfrage, die ich bin, die Ausführung ist: realm.where(Child_pages.class).equalTo("id_cp",page_id).findFirst()
InformationsquelleAutor der Frage Bachlet Tansime | 2015-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Reich derzeit unterstützt keine auto-increment Primärschlüssel. Sie können jedoch leicht implementieren Sie selbst mit so etwas wie:
Ich hoffe die können den Einstieg.
InformationsquelleAutor der Antwort Bachlet Tansime
Java-Bindung unterstützt keine Primärschlüssel noch, aber es ist auf der roadmap und mit hoher Priorität - siehe: https://groups.google.com/forum/#!Thema/Reich-java/6hFqdyoH67w
. Als eine Problemumgehung, die Sie verwenden können, dieses Stück code für die Generierung von Schlüsseln:
Benutze ich singleton-factory für die Erzeugung von Primärschlüsseln als eine allgemeinere Lösung mit besserer performance (ohne Abfrage für
max("id")
jeder Zeit DankAtomicInteger
).Gibt es eine lange Diskussion in Reich Git-Hub wenn Sie mehr Kontext: Dokument, wie man eine auto increment id?
InformationsquelleAutor der Antwort zacheusz
Wie bereits erwähnt, auto-Inkrement wird jedoch nicht unterstützt.
Aber für diejenigen, die kotlin und haben will, ein auto-Inkrement-Verhalten mit Reich, dies ist eine der Möglichkeiten:
InformationsquelleAutor der Antwort Vinicius Lima
wenn Ihre Id ist Lange dann:
InformationsquelleAutor der Antwort LEM Adane
Leider kann ich keine Kommentare auf andere Antworten, aber ich möchte hinzufügen Vinicius` Antwort.
Ersten, sollten Sie nicht öffnen Sie ein neues realm Instanz, bei der Suche nach primary key, vor allem, wenn Sie nicht schließen Sie, wie dies fügt hinzu, um die maximale mögliche Datei-Deskriptor zählen.
Zweitens, obwohl dies ist eine Vorliebe, die Sie nicht haben sollte primitiven Typen (oder Objekt-äquivalente) als nullables (in Kotlin), da dies fügt redundante Anforderung der überprüfung von null-Zulässigkeit.
Dritten, da Sie mit kotlin, können Sie einfach definieren, eine Erweiterung Methode
Realm
Klasse, wie zum Beispiel:Da alle
RealmObject
InstanzenRealmModel
und sogar Objekte, die nicht nachverfolgt Reich nochRealmModel
Instanzen, daher wird es verfügbar sein, wo immer Sie Ihr Reich zugehörigen Klassen. Java-äquivalent wäre:Spät Bearbeiten Hinweis: die sollte Man besser nicht mit diesem Ansatz, wenn Sie Umgang mit Daten, die möglicherweise von externen Quellen, wie die anderen Datenbanken oder web, weil, das führt zu Kollisionen zwischen den Daten in Ihrer internen Datenbank. Stattdessen sollten Sie verwenden
max([id field name])
. Siehe den vorherigen Schnipsel, die ich bereits modifiziert, um Platz für diese zu Bearbeiten.InformationsquelleAutor der Antwort Dragas
//EDIT
Fand ich diese neue Lösung auf dieses problem
//Original-Antwort
Ich wollte nur zu teilen, mein Versuch, dieses Problem zu lösen, weil ich nicht wollen, eine primary Key-Wert die ganze Zeit. Zuerst erstellte ich eine Datenbank-Klasse zu behandeln, die Lagerung von RealmObject.
Nach dem erstellen der Datenbank-Klasse i erstellt eine Schnittstelle zu unterscheiden zwischen Objekten mit einem Primary Key und ohne.
Nun müssen Sie nur diesen code Bearbeiten des vorherigen execute-Methode
Mit dieser Lösung ist die Datenbank-Logik wird immer noch in eine Klasse und diese Klasse kann weitergegeben zu jeder Klasse, die muss schreiben in die Datenbank.
Für weitere Anregungen fühlen Sie sich frei, um einen Kommentar unten hinterlassen.
InformationsquelleAutor der Antwort kejith