Миграция схемы ActiveAndroid добавляет столбец, который является объектом

Я новичок в SQLite и 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>?


person RScottCarson    schedule 09.05.2016    source источник
comment
Итак, проблема в том, что вы не знаете, как назвать поле внешнего ключа, верно? Я тоже не знаю, и в документации, кажется, не сказано. На ум приходят два варианта: заглянуть в исходный код или запустить приложение с новой моделью, проверить базу данных и посмотреть, что делает АА для создания внешнего ключа. Если разберетесь, отпишитесь о своем решении.   -  person nasch    schedule 09.05.2016


Ответы (1)


Вы можете написать свой собственный сериализатор для класса Controller и выполнить миграцию

ИЗМЕНИТЬ ТАБЛИЦУ GatewayDevice ДОБАВИТЬ СТОЛБЦУ контроллера ТЕКСТ

(тип строки)

person Stanislav Parkhomenko    schedule 02.07.2016