領域模型
領域模型必須擴充套件 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 不能線上程之間傳遞。