我最近把表类改成了这样。
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都是用来在表不存在的时候创建Table的。
"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')"
]
我不知道什么是哈希和它做什么。而且它似乎不适合迁移。我如何解决这个问题?
1条答案
按热度按时间whitzsjs1#
我该如何解决这个问题?
@Database
注解类同名但后缀为**_Impl**的类。ALTER TABLE product RENAME TO original_product;
INSERT INTO product SELECT seq,pucd,coalesce(updated_at,'unknown') FROM original_product;
DROP TABLE IF EXISTS original_product;
我完全不知道什么是大麻,它有什么作用
hash是schema的hash。它是在编译时生成的。它也存储在room_master_table中。如果schema被更改(就像你的情况一样),那么编译后的版本将在运行时与存储的版本进行比较。如果它们不同,则会发生崩溃。