我最近像这样更改了表类。
data class Product(
@PrimaryKey(autoGenerate = true)
val seq: Long,
val pucd: String,
@ColumnInfo(name = "updated_at")
@SerialName("updated_at")
val updatedAt: String?
)
data class Product(
@PrimaryKey(autoGenerate = true)
val seq: Long,
@ColumnInfo(name = "pucd") // added ColumnInfo
val pucd: String,
@ColumnInfo(name = "updated_at")
@SerialName("updated_at")
val updatedAt: String // to non-null
)
我崩溃了。那说我可能需要升级版本。但我仍然崩溃了。 所以,我想提取模式进行迁移。
我记得 2-3 年前,json 模式文件帮助我复制和粘贴迁移查询。但我只看到
createSql
和 setupQueries
的东西可以称为查询。
但是所有的createSql都是在表不存在的情况下创建表的。和 setUpQueries 一样。
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0d7f64a73a5cbc11b1b1e481b24432ef')"
]
我不知道什么是散列以及它的作用。而且它似乎不是为了迁移。我该如何解决这个问题?
我该如何解决这个问题?
@Database
注解类同名但后缀为_Impl的类。ALTER TABLE product RENAME TO original_product;
INSERT INTO product SELECT seq,pucd,coalesce(updatedat,'unknown') FROM original_product;
DROP TABLE IF EXISTS original_product;
我不知道什么是散列以及它的作用
散列是模式的散列。它是在编译时生成的。它也存储在 room_master_table 中。如果架构发生更改(如您的情况),则编译版本将在运行时与存储版本进行比较。如果它们不同,就会发生崩溃。