- DB-Version auf 6 hochgezaehlt (Clean-Slate, keine Rueckwaertskompatibilitaet) - Alle manuellen Migrationen (v1-v5) aus Migrations.kt entfernt - DatabaseModule: addMigrations() durch fallbackToDestructiveMigration() ersetzt - migration-guide.md: AutoMigration-Workflow dokumentiert - Instrumentierte Tests: alte Migrationstests durch frische DB-Tests ersetzt - Schema 6.json exportiert Closes #89
2 KiB
2 KiB
Room-Migrationen – Entwickler-Leitfaden
Grundsatz
Ab Version 6 nutzt die App Room @AutoMigration für Schema-Änderungen. Room generiert die Migrationen automatisch – User müssen nichts tun.
fallbackToDestructiveMigration() ist als Fallback aktiv: Kann Room keine
automatische Migration ableiten, wird die DB zurückgesetzt und neu erstellt.
Aktuelle DB-Version
Version 6 (Stand: Mai 2026)
Historische manuelle Migrationen (v1–v5) wurden entfernt. Keine Rückwärtskompatibilität zu älteren DB-Versionen.
Checkliste für neue Schema-Änderungen
- DB-Version hochzählen:
versioninKrisenvorratDatabaseanpassen - @AutoMigration ergänzen:
autoMigrations = [AutoMigration(from = X, to = Y)]in der@Database-Annotation - Falls AutoMigration nicht reicht (z.B. Column-Rename, Table-Rebuild):
@RenameColumn/@DeleteColumnAutoMigrationSpec schreiben- Oder manuelle
Migration(X, Y)inMigrations.kt+DatabaseModule.addMigrations()
- Schema-Export prüfen: JSON in
app/schemas/wird automatisch generiert
Beispiel: Einfache Spalte hinzufügen
// KrisenvorratDatabase.kt
@Database(
entities = [...],
version = 7,
autoMigrations = [AutoMigration(from = 6, to = 7)],
exportSchema = true
)
Fertig – Room erkennt die neue Spalte automatisch.
Beispiel: Spalte umbenennen
@Database(
entities = [...],
version = 7,
autoMigrations = [AutoMigration(from = 6, to = 7, spec = V6ToV7::class)],
exportSchema = true
)
abstract class KrisenvorratDatabase : RoomDatabase() {
@RenameColumn(tableName = "items", fromColumnName = "old_name", toColumnName = "new_name")
class V6ToV7 : AutoMigrationSpec
}
Schema-Export
Room exportiert Schemas automatisch nach app/schemas/. Diese JSON-Dateien werden
versioniert und können für MigrationTestHelper verwendet werden.
Konfiguration in app/build.gradle.kts:
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
}