Я разрабатываю приложение Android, в котором я создаю базу данных, используя:
Room.databaseBuilder(context.applicationContext, WaterDb::class.java, "water.db")
.createFromAsset("predefined_amounts.db")
.build()
Как видно выше, у меня есть база данных predefined_amounts.db
, где у меня есть определение таблицы вроде этого:
CREATE TABLE "AMOUNTS" (
"amount" INTEGER NOT NULL,
"icon" TEXT NOT NULL,
PRIMARY KEY("amount","icon")
);
Соответствующий объект в Kotlin:
@Entity(tableName = "AMOUNTS", primaryKeys = ["amount", "icon"])
data class Amounts(
@NonNull val amount: Int,
@NonNull val icon: String
)
Это выглядит нормально, но когда я пытаюсь выполнить, я получаю следующую ошибку:
java.lang.IllegalStateException: Pre-packaged database has an invalid schema: AMOUNTS(me.sparker0i.drinkwater.data.entity.Amounts).
Expected: TableInfo{name='AMOUNTS', columns={
icon=Column{name='icon', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=2, defaultValue='null'},
amount=Column{name='amount', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}},
foreignKeys=[], indices=[]}
Found:
TableInfo{name='AMOUNTS', columns={
amount=Column{name='amount', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'},
icon=Column{name='icon', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}},
foreignKeys=[], indices=[]}
Я указал NOT NULL
в БД и аннотацию @NonNull
в столбцах объекта, но все же не знаю, почему notNull
выглядит как false
.
Я не думаю, что обратный порядок столбцов в ожидаемых и найденных должно быть проблемой, но я не знаю, почему primaryKeyPosition
поступает иначе? Я не знаю, что здесь не так.