Jusqu'à aujourd'hui, toute modification de la structure de la base de données devait être écrite manuellement dans la classe Migration, indiquant à Room ce qui avait exactement changé. Dans la plupart des cas, cela impliquait d'écrire des requêtes SQL complexes.
À partir de la version alpha01 2.4.0 , la migration de la structure de la base de données dans la salle est beaucoup plus simple - il existe une migration automatique (auto-migration).
Dans des cas simples (par exemple, ajouter ou supprimer une colonne, créer une nouvelle table), il vous suffit de spécifier la version à partir de laquelle vous souhaitez migrer, et Room fera tout le sale boulot à votre place et générera automatiquement les migrations.
Dans les cas plus complexes (et ambigus), Room aura besoin d'aide: vous devrez indiquer quelle colonne ou table a été renommée ou supprimée. Sur la base de ces données, Room générera et exécutera automatiquement la migration.
Jetons un coup d'œil à quelques exemples pour mieux comprendre comment cela fonctionne.
Activer les migrations automatiques
Supposons que nous ajoutions une nouvelle colonne à la table (passant de la version 1 à la version 2). En conséquence, nous devrons mettre à jour l'annotation @Database
en augmentant le numéro de version et en écrivant des versions spécifiques dans 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 peut gérer automatiquement des cas simples, mais dans des situations plus complexes et ambiguës, nous devons décrire l'essence des changements apportés. Dans tous les autres cas, utilisez des migrations régulières.
La fonctionnalité des migrations automatiques est en statut alpha . Aidez-nous à l'améliorer en laissant des commentaires dans le suivi des bogues .
Liens utiles
Documentation sur @AutoMigration.
Liste des commits inclus dans la version 2.4.0-alpha01.