领域模型
领域模型必须扩展 RealmObject
基类,它们定义底层数据库的模式。
支持的字段类型有 boolean
,byte
,short
,int
,long
,float
,double
,String
,Date
,byte[]
,链接到其他 RealmObject
s 和 RealmList<T extends RealmModel>
。
public class Person extends RealmObject {
@PrimaryKey //primary key is also implicitly an @Index
//it is required for `copyToRealmOrUpdate()` to update the object.
private long id;
@Index //index makes queries faster on this field
@Required //prevents `null` value from being inserted
private String name;
private RealmList<Dog> dogs; //->many relationship to Dog
private Person spouse; //->one relationship to Person
@Ignore
private Calendar birthday; //calendars are not supported but can be ignored
// getters, setters
}
如果向 RealmObject 添加(或删除)新字段(或者添加新的 RealmObject 类或删除现有类),则需要进行迁移。你可以在 RealmConfiguration.Builder
中设置 deleteIfMigrationNeeded()
,也可以定义必要的迁移。添加(或删除)@Required
或 @Index
或 @PrimaryKey
注释时也需要迁移。
必须手动设置关系,它们不是基于主键自动设置的。
从 0.88.0 开始,也可以在 RealmObject 类中使用公共字段而不是私有字段/ getter / setter。
如果该类也用 @RealmClass
注释,也可以实现 RealmModel
而不是扩展 RealmObject
。
@RealmClass
public class Person implements RealmModel {
// ...
}
在这种情况下,像 person.deleteFromRealm()
或 person.addChangeListener()
这样的方法被替换为 RealmObject.deleteFromRealm(person)
和 RealmObject.addChangeListener(person)
。
限制是通过 RealmObject
,只有 RealmObject
可以扩展,并且不支持 final
,volatile
和 transient
字段。
重要的是,只能在事务中修改托管的 RealmObject 类。一个管理 RealmObject 不能在线程之间传递。