我一直在尝试自动迁移,其中一个表将被删除,到我的房间数据库。我指定自动迁移如下:
@Database(
version = 9,
entities = [...],
views = [...],
exportSchema = true,
autoMigrations = [
...
AutoMigration(8, 9)
]
)
@TypeConverters(
value = [...],
builtInTypeConverters = BuiltInTypeConverters(enums = BuiltInTypeConverters.State.ENABLED)
)
字符串
当我尝试构建项目时,我得到以下错误:
AutoMigration Failure: Please declare an interface extending 'AutoMigrationSpec',
and annotate with the @RenameTable or @DeleteTable annotation to specify the change
to be performed:
1) RENAME:
@RenameTable.Entries(
@RenameTable(
fromTableName = "some_table",
toTableName = <NEW_TABLE_NAME>
)
)
2) DELETE:
@DeleteTable.Entries(
@DeleteTable(
tableName = "some_table"
)
)
型
我还从实体列表中删除了表类,即SomeTable::class。
在错误之后,我声明一个AutoMigrationSpec类,用@DeleteTable注解,如下所示:
@DeleteTable("some_table")
class Version9 : AutoMigrationSpec
型
并添加声明它作为规范,如下所示:
@Database(
version = 9,
entities = [...],
views = [...],
exportSchema = true,
autoMigrations = [
...
AutoMigration(8, 9, Version9::class)
]
)
@TypeConverters(
value = [...],
builtInTypeConverters = BuiltInTypeConverters(enums = BuiltInTypeConverters.State.ENABLED)
)
型
我得到了以下相同的错误。
如果我使用规范作为接口而不是类,
@DeleteTable("some_table")
interface Version9 : AutoMigrationSpec
型
我得到一个额外的错误,The AutoMigration spec type must be a class.
在声明AutoMigrationSpec
时,我还尝试使用以下格式:
@DeleteTable.Entries(DeleteTable("some_table"))
class Version9 : AutoMigrationSpec
型
但是,我得到了最初的错误。
1条答案
按热度按时间mm5n2pyu1#
我看不出你提供的代码有什么问题。
基于您的代码,假设其他代码,编码使之前和之后运行相对简单,使用KAPT而不是KSP并使用2.5.2 Room库,然后代码按照日志输出的预期工作(参见下面的代码):
第1部分为第一版,有2个表(T1和T2):-
字符串
第二个版本(迁移)的第2部分,只有一个表(T1):-
型
完整的代码是:
所有DB代码(根据第2次运行 (参见第1次运行的注解)):-
型
活动代码 (为简洁起见,在主线程上运行,第二次运行时再次运行,再次参考第一版的注解):-
型
结论
基本上,正如最初所说的,代码没有明显的问题。