今日まで、データベースの構造への変更は、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 — ..
, , .
?
, Room , , @Database
. , Room .
MigrationTestHelper
helper.runMigrationsAndValidate()
, Migration.
. — autoMigrations
@Database
( exportSchema = true
).
Roomは単純なケースを自動的に処理できますが、より複雑であいまいな状況では、加えられた変更の本質を説明する必要があります。それ以外の場合は、定期的な移行を使用してください。
自動移行の機能はアルファステータスです。バグトラッカーにフィードバックを残して、改善にご協力ください。