今日の時点で、これに対する GreenDAO プロジェクトによる正式なサポートはないと思いますが、考えはあります。Sqlite は、列に適用できるDEFAULTテーブル制約をサポートしています。たとえば、次のコード ブロックはCity
、表の列のデフォルト値Persons
が「Sandnes」であることを示しています。
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
sqlite が制約をサポートしていることがわかれば、生成されたクラスDefault
をハッキングできます。例としてOrderDAO.javaDAO
を使用します。以下のスニペットは、GreenDAO によって生成されたコードコード ブロックです。create table
public static void createTable(SQLiteDatabase db, boolean ifNotExists) {
String constraint = ifNotExists? "IF NOT EXISTS ": "";
db.execSQL("CREATE TABLE " + constraint + "'ORDERS' (" + //
"'_id' INTEGER PRIMARY KEY ," + // 0: id
"'DATE' INTEGER," + // 1: date
"'CUSTOMER_ID' INTEGER NOT NULL );"); // 2: customerId
}
これで、制約をサポートするためにこれを変更できる可能性が高くなります。DEFUALT
を追加して、上記のコード ブロックの最後の関連行を変更しDEFAULT(-1)
ます。
"'CUSTOMER_ID' INTEGER NOT NULL DEFAULT(-1));"); // 2: customerId
注: この変更をテストするときは、データベースが再作成されるように、sqlite スキーマ バージョンをインクリメントするか、アプリを再インストールしてください。