ActiveAndroid Tips
はじめに
- 基本的な使い方は以下のページにまとまっていたので、その他のTipsをメモ。
Date型を扱う
- SQLite では Date 型が扱えないので、Long に変換して利用するため、http://dev.classmethod.jp/smartphone/android/activeandroid/ にあるシリアライザーを使う。
- Search の条件で Date 型を指定する場合は、シリアライザーが効かないので都度自分で変換する。
Date now = new Date(); new Select() .from(SomeModel.class) .where("SomeDate = ?", now.getTime()) .execute();
リレーションシップ
"1:多"な親子関係の定義
- Category が親で Item が子
@Table(name = "Categories") public class Category extends Model { @Column(name = "Name") public String name; public List<Item> items() { return getMany(Item.class, "Category"); } } @Table(name = "Items") public class Item extends Model { @Column(name = "Name") public String name; @Column(name = "Category") public Category category; }
外部キー制約で親の削除時に子も削除する
- デフォルトでは子のいる親を削除すると例外が発生する
- Column の定義時に onDelete を適宜指定すると、子も同時に削除できる
@Table(name = "Items") public class Item extends Model { @Column(name = "Name") public String name; // 変更箇所 @Column(name = "Category", onDelete = Column.ForeignKeyAction.CASCADE) public Category category; }
レコードの存在確認
- 検索したレコードが存在するか確認したい場合は、execute() で結果の List の要素数を調べるか、exists() を使う。
public void testExistsWhereClause() { cleanTable(); populateTable(); From from = new Select() .from(MockModel.class) .where("intField = ?", 1); final List<MockModel> list = from.execute(); final boolean exists = from.exists(); assertTrue(exists); assertTrue(list.size() > 0); }