Предположим, у меня есть простая База данных:
@Database(entities = {User.class}, version = 1)
abstract class AppDatabase extends RoomDatabase {
public abstract Dao getDao();
}
Теперь я добавляю новый объект: Pet
и bumping version to 2:
@Database(entities = {User.class, Pet.class}, version = 2)
abstract class AppDatabase extends RoomDatabase {
public abstract Dao getDao();
}
Конечно, Room выбрасывает исключение: java.lang.IllegalStateException: A migration from 1 to 2 is necessary.
Предполагая, что я не изменил класс User
(так что все данные безопасны), я должен предоставить миграцию, которая просто создает новую таблицу. Итак, я изучаю классы, созданные Room, ищем сгенерированный запрос для создания моей новой таблицы, копирования и вставки в перенос:
final Migration MIGRATION_1_2 =
new Migration(1, 2) {
@Override
public void migrate(@NonNull final SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS 'Pet' ('name' TEXT NOT NULL, PRIMARY KEY('name'))");
}
};
Однако мне неудобно делать это вручную. Есть ли способ рассказать номер: я не касаюсь какой-либо существующей таблицы, поэтому данные безопасны. Пожалуйста, создайте миграцию для меня?