Миграция Android-комнат Не Null примитивные типы - PullRequest
0 голосов
/ 31 мая 2018

Я переношу приложение, унаследованное в 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, а затем выполнить миграцию.Это было бы много работы и действительно отстой!

1 Ответ

0 голосов
/ 09 августа 2018

Вы можете написать это в Kotlin:

@Entity(tableName = "user_groups")
data class UserGroupModel (
@Primary Key
@ColumInfo(name = "_id")
var rowId: String,
@ColumnInfo(name = "is_default")
var isDefault: Int?)
...