2016-12-06 5 views

答えて

4

はい、可能です。値は、あなたが作成上の制約に違反することがありますを意味し、データベースに0に初期化されているので

 RealmObjectSchema objectSchema = schema.get("MyObject"); 
     objectSchema.addField("newId", long.class) 
       .transform(new RealmObjectSchema.Function() { 
        @Override 
        public void apply(DynamicRealmObject obj) { 
         obj.setLong("newId", getNewId(obj)); 
        } 
       }) 
       .removeField("id") 
       .renameField("newId", "id") 
       .addPrimaryKey("id"); 

ただし、直接

objectSchema.addField("newId", long.class, FieldAttribute.PRIMARY_KEY) 

としてフィールドを作成することはできません。したがって、値が設定された後でのみ、主キー制約を追加する必要があります。あなたのケースでは


RealmObjectSchema objectSchema = schema.get("MyObject"); 
objectSchema.addField("newId", long.class) 
    .transform(new RealmObjectSchema.Function() { 
     @Override 
     public void apply(DynamicRealmObject obj) { 
      obj.setLong("newId", getNewId(obj)); 
     } 
    }) 
    .removePrimaryKey() 
    .addPrimaryKey("newId"); 
+0

は、既存のフィールドを削除する必要はありません。古いプライマリキー制約を削除して、プライマリキー制約のある新しいフィールドを追加したい –

+0

あまりにも機能します – EpicPandaForce

関連する問題