2016-12-06 67 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