Roomへの自動移行

今日まで、データベースの構造への変更は、Migrationクラスに手動で記述して、正確に何が変更されたかをRoomに通知する必要がありました。ほとんどの場合、これには複雑なSQLクエリの記述が必要でした。





以降では、バージョン2.4.0 alpha01、部屋でデータベース構造の移行は非常に簡単-がある自動移行(自動移行が)。





単純なケース(たとえば、列の追加または削除、新しいテーブルの作成)では、移行元のバージョンを指定するだけで、Roomがすべてのダーティな作業を実行し、移行自動的に生成します。





より複雑な(そしてあいまいな)場合、Roomは助けを必要とします:どの列またはテーブルが名前変更または削除されたかを示す必要があります。このデータに基づいて、Roomは自動的に移行を生成して実行します。





これがどのように機能するかをよりよく理解するために、いくつかの例を見てみましょう。





自動移行をオンにする

テーブルに新しい列を追加するとします(バージョン1からバージョン2に移動します)。その結果、@Database



バージョン番号を増やし、特定のバージョンを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は単純なケースを自動的に処理できますが、より複雑であいまいな状況では、加えられた変更の本質を説明する必要があります。それ以外の場合は、定期的な移行を使用してください。





自動移行の機能はアルファステータスです。バグトラッカーにフィードバックを残して、改善にご協力ください





便利なリンク

  1. ドキュメント@AutoMigrationに。





  2. バージョン2.4.0-alpha01に含まれていたコミットのリスト








All Articles