■モデル
public class User extends RealmObject {
private String name;
private int age;
@Ignore
private int sessionId;
// Standard getters & setters generated by your IDE…
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public int getSessionId() { return sessionId; }
public void setSessionId(int sessionId) { this.sessionId = sessionId; }
}
public、protected、privateフィールドや、任意のメソッドの使用も可能。
public class User extends RealmObject {
public String name;
public boolean hasLongName() {
return name.length() > 7;
}
@Override
public boolean equals(Object o) {
// カスタムのequals()メソッド
}
}
・データ型
サポートしているデータ型
boolean
byte
short
int
long
float
double
String
Date
byte[]
byte, short, int, longは全て long として扱われる。
プリミティブラッパークラスの次を使用できる。
これらはnullをセットできる。
Boolean
Byte
Short
Integer
Long
Float
Double
・必須フィールド
必須フィールドには @Required アノテーションを使用する。
次の型のみ使用できる。
Boolean
Byte
Short
Integer
Long
Float
Double
String
byte[]
Date
プリミティブ型やRealmList型は、暗黙的に@Requiredとして扱われる。
・保存しないプロパティ
保存しないプロパティには @Ignore アノテーションを使用する。
・オブジェクトの自動更新
RealmObjectは"live"なオブジェクトであり、
データ更新を自動的に反映する。
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Dog myDog = realm.createObject(Dog.class);
myDog.setName("Fido");
myDog.setAge(1);
}
});
Dog myDog = realm.where(Dog.class).equalTo("age", 1).findFirst();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Dog myPuppy = realm.where(Dog.class).equalTo("age", 1).findFirst();
myPuppy.setAge(2);
}
});
myDog.getAge(); // => 2
・インデックス
インデックスフィールドには @Index アノテーションを使用する。
インデックスを指定できる型は以下
String
byte
short
int
long
boolean
Date
・プライマリキー
プライマリキーには @PrimaryKey アノテーションを使用する。
プライマリキーを指定できる型は以下
String
byte
short
int
long
Byte
Short
Integer
Long
プライマリキーを指定したモデルには copyToRealmOrUpdate()を
使って追加/更新が出来る。
final MyObject obj = new MyObject();
obj.setId(42);
obj.setName("Fish");
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
// 次のコメント行のコードでは、単に新たなオブジェクトの作成を試みます
// realm.copyToRealm(obj);
// 同じIDのオブジェクトが存在すれば更新を行い、存在しなければ新たに作成を行います
realm.copyToRealmOrUpdate(obj);
}
});
■リレーションシップ
public class Email extends RealmObject {
private String address;
private boolean active;
// settersとgettersは省略しています
}
public class Contact extends RealmObject {
private String name;
// settersとgettersは省略しています
}
・多対1
public class Contact extends RealmObject {
public String name;
private Email email;
// Other fields…
}
・多対多
public class Contact extends RealmObject {
public String name;
public RealmList<Email> emails;
}
・リレーションシップに対するクエリ
public class Person extends RealmObject {
private String id;
private String name;
private RealmList<Dog> dogs;
// getters and setters
}
public class Dog extends RealmObject {
private String id;
private String name;
private String color;
// getters and setters
}
RealmResults<Person> persons = realm.where(Person.class)
.equalTo("dogs.color", "Brown")
.findAll();
persons.get(0).getDogs();
・逆方向のリレーションシップ
PersonオブジェクトからDogオブジェクトをたどることはできるが
DogオブジェクトからPersonオブジェクトをたどることはできない。
@LinkingObjects アノテーションを付加したフィールドを使用することで
関連元のオブジェクトを取得できる。
public class Person extends RealmObject {
private String id;
private String name;
private RealmList<Dog> dogs;
// getters and setters
}
public class Dog extends RealmObject {
private String id;
private String name;
private String color;
@LinkingObjects("dogs")
private final RealmResults<Person> owners;
// getters and setters
}
@LinkingObjectsアノテーションを付加したフィールドは
final かつ RealmResults<T>型として定義する。
0コメント