Até hoje, qualquer mudança na estrutura do banco de dados tinha que ser escrita manualmente na classe Migration, dizendo à Room o que exatamente mudou. Na maioria dos casos, isso envolvia escrever consultas SQL complexas.
A partir da versão-alpha01 2.4.0 , a migração da estrutura do banco de dados na Sala é muito mais simples - há migração automática ( migração automática).
Em casos simples (por exemplo, adicionar ou remover uma coluna, criar uma nova tabela), você apenas especifica de qual versão deseja migrar, e a Room fará todo o trabalho sujo para você e gerará migrações automaticamente.
Em casos mais complexos (e ambíguos), a Room precisará de ajuda: você precisará indicar qual coluna ou tabela foi renomeada ou excluída. Com base nesses dados, a Room irá gerar e executar a migração automaticamente.
Vamos dar uma olhada em alguns exemplos para entender melhor como isso funciona.
Ativar migrações automáticas
Suponha que adicionemos uma nova coluna à tabela (passando da versão 1 para a versão 2). Como resultado, teremos que atualizar a anotação @Database
aumentando o número da versão e escrevendo versões específicas em AutoMigration
:
, , , AutoMigration
:
Room ? , . :
,
, ,
..
: . , ,
exportSchema
true
. : Cannot create auto-migrations when export schema is OFF.
?
, Room' . , .
: Room , ( ) . , Room AutoMigrationSpec, .
AutoMigrationSpec :
@DeleteTable(tableName)
— , ,
@RenameTable(fromTableName, toTableName)
— , ,
@DeleteColumn(tableName, columnName)
— , ,
@RenameColumn(tableName, fromColumnName, toColumnName)
— , , .
, Doggos
GoodDoggos
. Room :
GoodGoggos
, , , (Doggos
) ,
Doggos
, .
:
vs.
1.0, Room Migration . , .
, . Room , . , , .
Migration
, databaseBuilder()
addMigrations()
:
Room . , 1 2 Migration
, 2 3 — ..
, , .
?
, Room , , @Database
. , Room .
MigrationTestHelper
helper.runMigrationsAndValidate()
, Migration.
. — autoMigrations
@Database
( exportSchema = true
).
A Room pode lidar com casos simples automaticamente, mas em situações mais complexas e ambíguas, precisamos descrever a essência das alterações feitas. Em todos os outros casos, use migrações regulares.
A funcionalidade de migrações automáticas está em status alfa . Ajude-nos a torná-lo melhor, deixando comentários no bug tracker .
Links Úteis
Documentação sobre @AutoMigration.
Lista de commits incluídos na versão 2.4.0-alpha01.