Hasta el día de hoy, cualquier cambio en la estructura de la base de datos tenía que escribirse manualmente en la clase Migration, indicando a Room qué ha cambiado exactamente. En la mayoría de los casos, esto implicó escribir consultas SQL complejas.
A partir de la versión-alpha01 2.4.0 , la migración de la estructura de la base de datos en la Sala es mucho más simple: hay migración automática ( migración automática).
En casos simples (por ejemplo, agregar o eliminar una columna, crear una nueva tabla), simplemente especifique desde qué versión desea migrar, y Room hará todo el trabajo sucio por usted y generará migraciones automáticamente.
En casos más complejos (y ambiguos), Room necesitará ayuda: deberá indicar qué columna o tabla ha sido renombrada o eliminada. Según estos datos, Room generará y ejecutará automáticamente la migración.
Echemos un vistazo a algunos ejemplos para comprender mejor cómo funciona esto.
Activar migraciones automáticas
Supongamos que agregamos una nueva columna a la tabla (pasando de la versión 1 a la versión 2). Como resultado, tendremos que actualizar la anotación @Database
aumentando el número de versión y escribiendo versiones específicas en 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
).
Room puede manejar casos simples automáticamente, pero en situaciones más complejas y ambiguas, necesitamos describir la esencia de los cambios realizados. En todos los demás casos, utilice migraciones regulares.
La funcionalidad de las migraciones automáticas está en estado alfa . Ayúdanos a mejorarlo dejando comentarios en el rastreador de errores .
Enlaces útiles
Documentación sobre @AutoMigration.
Lista de confirmaciones que se incluyeron en la versión 2.4.0-alpha01.