Я переношу приложение, унаследованное в Room, из SQLOpenHelper, и у меня возникла проблема с сопоставлением одной из моих таблиц.
У меня есть скрипт
CREATE TABLE user_groups (
_id TEXT PRIMARY KEY,
is_default INTEGER DEFAULT 0 )
Мой класс Entity выглядиткак это
@Entity(tableName = "user_groups")
public class UserGroupModel {
@Primary Key
@NonNull
@ColumInfo(name = "_id")
private String rowId;
@ColumnInfo(name = "is_default")
private int isDefault;
..... constructor / getters ....
}
Когда я иду, чтобы сделать сборку с новой версией базы данных, я получаю ошибку миграции
IllegalStateException: миграция неправильно обработала user_groups
Единственное несоответствие, которое я вижу в трассировке стека, заключается в том, что Room заставляет примитивные типы иметь значение NULL, а мой старый сценарий - нет.
Ожидается:
{name = 'is_default ', type =' INTEGER ', affinity =' 3 ', notNull = true, primaryKeyPosition = 0}
Найдено:
{name =' is_default ',type = 'INTEGER', affinity = '3', notNull = false, primaryKeyPosition = 0}
Комната ожидает, что notNull будет истинным, но так как сценарий не определил это, то это не удалось.Это можно обойти?Или мне придется обновить все существующие таблицы с помощью сценария SQL, чтобы эти столбцы INTEGER изменились на NOT NULL, а затем выполнить миграцию.Это было бы много работы и действительно отстой!