2016-05-09 10 views
0

私はかなり新しいSQLiteとActiveAndroidです。ActiveAndroidスキーマ移行オブジェクトを追加する列

私はアプリのアップデートを展開するためにデータベースを移行する必要があります。 ActiveAndroidでは、スキーマの移行は移行スクリプトを作成することによって実行されます。基本的なデータ型を扱うときにこれを行う方法を理解するのは簡単ですが、他のオブジェクト/クラスにマッピングされている列を追加する方法は混乱します。

は例えば、以下の既存のモデルである:

@Table(name = "GatewayDevices", id = BaseColumns._ID) 
public class GatewayDevice extends Model { 

    private static final String TAG = GatewayDevice.class.getSimpleName(); 


    @Column(name = "identifier", unique = true, onUniqueConflict = Column.ConflictAction.REPLACE, notNull = true) 
    private String identifier; 

    @Column(name = "deviceType", notNull = true) 
    private String deviceType; 

    @Column(name = "name") 
    private String name; 

    public GatewayDevice() { 
     super(); 
    } 

    ... 

} 

そして、私はそれがために更新しています:

@Table(name = "GatewayDevices", id = BaseColumns._ID) 
public class GatewayDevice extends Model { 

    private static final String TAG = GatewayDevice.class.getSimpleName(); 


    @Column(name = "identifier", unique = true, onUniqueConflict = Column.ConflictAction.REPLACE, notNull = true) 
    private String identifier; 

    @Column(name = "deviceType", notNull = true) 
    private String deviceType; 

    @Column(name = "name") 
    private String name; 

    @Column(name = "controller", onUpdate = Column.ForeignKeyAction.CASCADE, onDelete = Column.ForeignKeyAction.CASCADE) 
    private Controller controller; 


    public GatewayDevice() { 
     super(); 
    } 

    ... 

} 

がどのように私は、基本的なALTER TABLE GatewayDevice ADD COLUMN controller <type>構造を使用してこの列を追加するには?

+0

だから、問題はあなたがドンは」外部キーフィールドと呼ばれるものを知っていますか?私はどちらか分かりませんし、ドキュメントは言わないようです。 2つのオプションは、ソースコードを調べたり、新しいモデルでアプリケーションを実行したり、データベースを調べたり、AAが外部キーを作成する方法を確認したりすることです。あなたがそれを理解したら、あなたの解決策を投稿してください。 – nasch

答えて

1

あなたは、コントローラクラスのための独自のシリアライザを書き、移行することができます

ALTER TABLE GatewayDevice ADD COLUMNコントローラTEXT

(文字列型)

関連する問題