Migrasi otomatis ke Room

Hingga saat ini, setiap perubahan pada struktur database harus ditulis secara manual di kelas Migrasi, memberi tahu Room apa yang sebenarnya telah berubah. Dalam kebanyakan kasus, ini memerlukan penulisan kueri SQL yang kompleks.





Dimulai dengan versi-alpha01 2.4.0 , migrasi struktur database di Room jauh lebih sederhana - ada migrasi otomatis ( migrasi otomatis).





Dalam kasus sederhana (misalnya, menambah atau menghapus kolom, membuat tabel baru), Anda cukup menentukan dari versi mana Anda ingin bermigrasi, dan Room akan melakukan semua pekerjaan kotor untuk Anda dan secara otomatis menghasilkan migrasi.





Dalam kasus yang lebih kompleks (dan ambigu), Room akan membutuhkan bantuan: Anda perlu menunjukkan kolom atau tabel mana yang telah diganti namanya atau dihapus. Berdasarkan data ini, Room secara otomatis akan menghasilkan dan menjalankan migrasi.





Mari kita lihat beberapa contoh untuk mendapatkan pemahaman yang lebih baik tentang cara kerjanya.





Aktifkan migrasi otomatis

Misalkan kita menambahkan kolom baru ke tabel (pindah dari versi 1 ke versi 2). Akibatnya, kami harus memperbarui anotasi @Database



dengan menambah nomor versi dan menulis versi tertentu di 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 — ..





, , .





?

: Migration



, .





, Room , , @Database



. , Room .





MigrationTestHelper



helper.runMigrationsAndValidate()



, Migration.





.





. — autoMigrations



@Database



( exportSchema = true



).





Room dapat menangani kasus sederhana secara otomatis, tetapi dalam situasi yang lebih kompleks dan ambigu, kami perlu mendeskripsikan esensi perubahan yang dibuat. Dalam semua kasus lainnya, gunakan migrasi biasa.





Fungsionalitas migrasi otomatis dalam status alfa . Bantu kami membuatnya lebih baik dengan meninggalkan umpan balik di pelacak bug .





link yang berguna

  1. Dokumentasi di @AutoMigration.





  2. Daftar komitmen yang disertakan dalam versi 2.4.0-alpha01.








All Articles