2016-07-12 20 views
3

Ich eine temporäre primäre festlegen und das Objekt zu Realm speichern, und später der Server einen eindeutigen Schlüssel für das Objekt und dann möchte ich den Primärschlüssel für das Objekt zu aktualisieren.Ist es in Realm möglich, den Primärschlüssel später zu ändern?

So ist es möglich, einen Primärschlüssel für das Objekt neu zuzuweisen? Und was passiert, wenn wir dem Objekt einen Primärschlüssel zuweisen? Wird das Objekt mit dem alten Primärschlüssel gespeichert?

+0

Auf welche Realmbindung beziehen Sie sich? Der sich derzeit ändernde Primärschlüssel ist in der Realm-Kakao-Bindung eingeschränkt, jedoch nicht in Realm-Java, das in der Zukunft geändert werden könnte. – beeender

+1

@beeendeder "android" in Zeile 1 :-) –

+0

ja android .. Ich benutze Realm für mein Android-Projekt .. –

Antwort

3

Es ist möglich, den Wert eines Primärschlüssels bis Realm 1.2.0 zu ändern.

Es ist verboten, den Wert des Primärschlüssels seit Realm 2.0.x zu ändern.

+0

Ja Ich habe einen temporären Primärschlüssel gesetzt, der ein Zeichenfolgenwert der aktuellen Zeit ist, und ich benutze die "shortid" -Bibliothek von Knoten-js-server, um eindeutige Schlüssel zu generieren. Daher brauche ich möglicherweise einen guten Mechanismus, um das gesamte Objekt und seine Objektverknüpfungen zu ersetzen. . Danke für die Antwort..!! :) –

+0

In diesem Fall gibt es jedoch einen Weg: Sie können eine Schema-Migration durchführen. Auf diese Weise können Sie das Feld mit der @ @ PrimaryKey-Annotation und dem zugrunde liegenden Index/Constraint ändern. – EpicPandaForce

-1

Ja ist es möglich, den Primärschlüssel eines bereits gespeicherten RealmObject, zu ändern nur, wenn die aktualisierte Primärschlüssel mit jedem vorhandenen Primärschlüssel nicht kollidieren, sonst Realm wird eine Ausnahme werfen. Um dies zu tun, müssen Sie das RealmObject abrufen, indem Sie es abfragen und manuell ändern.

Also in Ihrem Anwendungsfall, wenn Sie garantieren können, dass die Server-Primärschlüssel nicht mit einem Ihrer temporären Schlüssel kollidieren, würde es ohne Probleme funktionieren.

Allerdings IMO ist das nicht eine gute Sache zu tun.

+0

Also, nein, können Sie nicht, verursachen Sie ein neues Objekt erstellen. Es ändert nicht den aktuellen Wert, Sie werden 2 Objekt haben (das alte und das aktualisierte) –

+0

Nein, es aktualisiert das gleiche Objekt, den aktuellen Wert, Sie brauchen kein Kopie-Objekt, wenn die aktualisierte primaryKey kollidiert nicht. –

+0

Sie haben geschrieben: "Wenn Sie copyToRealmOrUpdate verwenden, wird ein neues RealmObject erstellt, da es einen neuen primaryKey hat." Ich denke "Will ein neues RealmObject erstellen" bedeutet, dass du 2 Objekte haben wirst. –

Verwandte Themen