У меня есть база данных версии 1 со столбцом int.
В версии 2 я хочу сделать свой столбец обнуляемым, чтобы добиться этого, я изменил тип данных моего столбца на Integer с int в моем классе сущности java.
Поскольку после некоторых исследований я понял, что невозможно изменить только тип данных столбца.
Вот что я делаю в своем методе миграции:
Мое исходное имя сущности - TaskEntity. Я создаю новую временную таблицу, копирую данные, затем удаляю исходную таблицу и затем переименовываю временную таблицу в исходную таблицу.
database.execSQL(
"BEGIN TRANSACTION;" +
"CREATE TABLE TaskEntityNew('id' INTEGER PRIMARY KEY AUTOINCREMENT," +
"'text' TEXT," +
"'caseid' INTEGER NULL," +
"'status' INTEGER NOT NULL DEFAULT 0," +
"'datetime' DATETIME," +
",'updateDt' DATETIME," +
" FOREIGN KEY (caseid) REFERENCES CaseEntity(id));" +
"INSERT INTO TaskEntityNew(text,caseid,status,datetime,updateDt) SELECT text,caseid,status,datetime,update FROM TaskEntity;"+
"DROP TABLE TaskEntity;" +
"ALTER TABLE 'TaskEntityNew' RENAME TO 'TaskEntity';" +
"COMMIT;"
);
Но я получаю эту ошибку
Caused by: java.lang.IllegalStateException: Migration didn't properly handle TaskEntity(EntityCollection.TaskEntity).
Expected:
TableInfo{name='TaskEntity', columns={text=Column{name='text', type='TEXT', notNull=false, primaryKeyPosition=0}, updateDt=Column{name='updateDt', type='INTEGER', notNull=false, primaryKeyPosition=0}, datetime=Column{name='datetime', type='INTEGER', notNull=false, primaryKeyPosition=0}, status=Column{name='status', type='INTEGER', notNull=true, primaryKeyPosition=0}, caseid=Column{name='caseid', type='INTEGER', notNull=false, primaryKeyPosition=0}, id=Column{name='id', type='INTEGER', notNull=true, primaryKeyPosition=1}}, foreignKeys=[ForeignKey{referenceTable='CaseEntity', onDelete='CASCADE', onUpdate='NO ACTION', columnNames=[caseid], referenceColumnNames=[id]}], indices=[Index{name='index_TaskEntity_caseid', unique=false, columns=[caseid]}]}
Found:
TableInfo{name='TaskEntity', columns={text=Column{name='text', type='TEXT', notNull=false, primaryKeyPosition=0}, updateDt=Column{name='updateDt', type='INTEGER', notNull=false, primaryKeyPosition=0}, datetime=Column{name='datetime', type='INTEGER', notNull=false, primaryKeyPosition=0}, status=Column{name='status', type='INTEGER', notNull=true, primaryKeyPosition=0}, caseid=Column{name='caseid', type='INTEGER', notNull=true, primaryKeyPosition=0}, id=Column{name='id', type='INTEGER', notNull=true, primaryKeyPosition=1}}, foreignKeys=[ForeignKey{referenceTable='CaseEntity', onDelete='CASCADE', onUpdate='NO ACTION', columnNames=[caseid], referenceColumnNames=[id]}], indices=[Index{name='index_TaskEntity_caseid', unique=false, columns=[caseid]}]}
Что я могу думать о проблеме, так это то, что мой блок SQL не выполняется, а мои старые данные таблицы пытаются сопоставить со старым классом сущностей Java.
Любая помощь будет оценена!