2016-12-06 63 views

回答

4

是的,這是可能的。

 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) 

,因爲值在數據庫中,這意味着你會違犯創建約束初始化爲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)); 
     } 
    }) 
    .removePrimaryKey() 
    .addPrimaryKey("newId"); 
+0

不想刪除現有的域。我想通過刪除舊的主鍵約束來添加具有主鍵約束的新字段 –

+0

哦,那也行 – EpicPandaForce