领域模型

领域模型必须扩展 RealmObject 基类,它们定义底层数据库的模式。

支持的字段类型有 booleanbyteshortintlongfloatdoubleStringDatebyte[],链接到其他 RealmObjects 和 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 可以扩展,并且不支持 finalvolatiletransient 字段。

重要的是,只能在事务中修改托管的 RealmObject 类。一个管理 RealmObject 不能在线程之间传递。