Я переношу приложение, унаследованное мной от SQLOpenHelper, в Room, и у меня возникла проблема с сопоставлением одной из моих таблиц.
У меня есть сценарий
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 заставляет примитивные типы быть NOT NULL, а мой старый скрипт - нет.
Ожидал:
{name = 'is_default', type = 'INTEGER', affinity = '3', notNull = true, primaryKeyPosition = 0}
Нашел:
{name = 'is_default', type = 'INTEGER', affinity = '3', notNull = false, primaryKeyPosition = 0}
Room ожидает, что notNull будет истинным, но, поскольку скрипт не указал это, его ошибка. Это можно обойти? Или мне придется обновить все мои существующие таблицы с помощью сценария SQL, чтобы изменить эти столбцы INTEGER на NOT NULL, а затем выполнить миграцию. Это было бы много работы и действительно отстой!