領域模型
領域模型必須擴充套件 RealmObject 基類,它們定義底層資料庫的模式。
支援的欄位型別有 boolean,byte,short,int,long,float,double,String,Date,byte[],連結到其他 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 可以擴充套件,並且不支援 final,volatile 和 transient 欄位。
重要的是,只能在事務中修改託管的 RealmObject 類。一個管理 RealmObject 不能線上程之間傳遞。