Room

Biblioteka trwałości Room udostępnia warstwę abstrakcji nad SQLite, aby umożliwić bardziej niezawodny dostęp do bazy danych, jednocześnie wykorzystując pełną moc SQLite.
Ostatnia aktualizacja Wersja stabilna Wersja kandydująca Wersja Beta Wersja alfa
11 grudnia 2024 r. 2.6.1 - - 2.7.0-alpha12

Deklarowanie zależności

Aby dodać zależność od Room, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven firmy Google.

Do zależności Room należą testowanie migracji Room i Room RxJava.

Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle aplikacji lub modułu:

Kotlin

dependencies {
    val room_version = "2.6.1"

    implementation("androidx.room:room-runtime:$room_version")

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See Add the KSP plugin to your project
    ksp("androidx.room:room-compiler:$room_version")

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$room_version")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$room_version")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$room_version")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:$room_version")
}

Groovy

dependencies {
    def room_version = "2.6.1"

    implementation "androidx.room:room-runtime:$room_version"

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See KSP Quickstart to add KSP to your build
    ksp "androidx.room:room-compiler:$room_version"

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

Informacje o używaniu wtyczki KAPT znajdziesz w dokumentacji KAPT.

Informacje o korzystaniu z wtyczki KSP znajdziesz w dokumentacji dotyczącej szybkiego uruchamiania KSP.

Informacje o korzystaniu z rozszerzeń Kotlina znajdziesz w dokumentacji ktx.

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Opcjonalnie w przypadku bibliotek innych niż na Androida (np. modułów Gradle tylko w języku Java lub Kotlin) możesz polegać na androidx.room:room-common, aby używać adnotacji Room.

Konfigurowanie opcji kompilatora

Pokój ma te opcje procesora adnotacji.

room.schemaLocation directory
Umożliwia eksportowanie schematów baz danych do plików JSON w danym katalogu. Więcej informacji znajdziesz w artykule Migrating Rooms.
room.incremental boolean
Włącza procesor Gradle do przyrostowego przetwarzania adnotacji. Wartością domyślną jest true.
room.generateKotlin boolean
Wygeneruj pliki źródłowe Kotlin zamiast plików Java. Wymaga KSP. Wartością domyślną jest false. Więcej informacji znajdziesz w uwagach do wersji 2.6.0.

Korzystanie z wtyczki Gradle do obsługi Room

W wersji Room 2.6.0 lub nowszej możesz użyć wtyczki Gradle Room, aby skonfigurować opcje kompilatora Room. Wtyczka konfiguruje projekt tak, aby wygenerowane schematy (które są wynikiem zadań kompilacji i są używane do automatycznych migracji) były prawidłowo skonfigurowane pod kątem umożliwienia odtwarzalności i przechowywania w pamięci podręcznej.

Aby dodać wtyczkę, zdefiniuj ją i jej wersję w pliku kompilacji Gradle najwyższego poziomu.

Groovy

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

W pliku kompilacji Gradle na poziomie modułu zastosuj wtyczkę i użyj rozszerzenia room.

Groovy

plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Kotlin

plugins {
    id("androidx.room")
}

android {
    ...
    room {
        schemaDirectory("$projectDir/schemas")
    }
}

Ustawienie schemaDirectory jest wymagane podczas korzystania z wtyczki Gradle Room. Spowoduje to skonfigurowanie kompilatora Room oraz różnych zadań kompilacji i ich backendów (javac, KAPT, KSP) w celu wyprowadzania plików schematu do folderów o różnych nazwach, np. schemas/flavorOneDebug/com.package.MyDatabase/1.json. Te pliki powinny zostać zaimportowane do repozytorium, aby można było ich używać do weryfikacji i automatycznych migracji.

Niektórych opcji nie można skonfigurować we wszystkich wersjach wtyczki Room Gradle, mimo że są one obsługiwane przez kompilator Room. Tabela poniżej zawiera listę opcji i wersję wtyczki Gradle Room, która dodała obsługę konfigurowania danej opcji za pomocą rozszerzenia room. Jeśli masz starszą wersję lub ta opcja nie jest jeszcze obsługiwana, możesz użyć opcji procesora adnotacji.

Option Od wersji
room.schemaLocation (pole wymagane) 2.6.0
room.incremental -
room.generateKotlin -

Korzystanie z opcji procesora adnotacji

Jeśli nie używasz wtyczki Room Gradle lub jeśli wybrana opcja nie jest obsługiwana przez Twoją wersję wtyczki, możesz skonfigurować Room za pomocą opcji procesora adnotacji, jak opisano w sekcji Dodawanie zależności kompilacji. Sposób określania opcji adnotacji zależy od tego, czy używasz KSP czy KAPT w przypadku pokoju.

Groovy

// For KSP
ksp {
    arg("option_name", "option_value")
    // other otions...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += [
                    "option_name":"option_value",
                    // other options...
                    ]
            }
        }
    }
}

Kotlin

// For KSP
ksp {
    arg("option_name", "option_value")
    // other options...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "option_name" to "option_value",
                    // other options...
                )
            }
        }
    }
}

Ponieważ room.schemaLocation jest katalogiem, a nie typem prymitywnym, podczas dodawania tej opcji należy użyć CommandLineArgumentsProvider, aby Gradle wiedział o tym katalogu podczas przeprowadzania sprawdzeń aktualności. Migracja bazy danych Room pokazuje pełną implementację CommandLineArgumentsProvider, która zapewnia lokalizację schematu.

Opinia

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk z gwiazdką.

Tworzenie nowego zgłoszenia

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 2.7

Wersja 2.7.0-alpha12

11 grudnia 2024 r.

androidx.room:room-*:2.7.0-alpha12 został zwolniony. Wersja 2.7.0-alpha12 zawiera te komisy.

Zmiany w interfejsie API

  • Dodaj eksperymentalny interfejs API RoomDatabase.Builder.setInMemoryTrackingMode(), aby skonfigurować, czy Room ma używać tabeli w pamięci do śledzenia nieważności. (I2a9b2, b/185414040)

Naprawione błędy:allowDestructiveMigrationForAllTables

Wersja 2.7.0-alpha11

30 października 2024 r.

androidx.room:room-*:2.7.0-alpha11 został zwolniony. Wersja 2.7.0-alpha11 zawiera te komity.

Zmiany w interfejsie API

  • Sprawdź ponownie nowo dodany podpis metody convertRows(), aby był to element zawieszania, który otrzymuje RawRoomQuery na potrzeby przekierowywania do pokoju. (Ie57b5, b/369136627)

Poprawki błędów

  • Rozwiązaliśmy problem z przełączaniem się między pokojami, w którym podczas używania funkcji @Relation w połączeniu z funkcją PagingSource generowany był nieprawidłowy kod.

Wersja 2.7.0-alpha10

16 października 2024 r.

androidx.room:room-*:2.7.0-alpha10 został zwolniony. Wersja 2.7.0-alpha10 zawiera te komity.

Zmiany w interfejsie API

  • Utwórz wewnętrzną klasę ByteArrayWrapper, aby obsługiwać relacje z ByteBuffer na platformach innych niż Android i JVM. (I75543, b/367205685)
  • Dodaj funkcję SQLiteStatement.getColumnType() oraz różne stałe wyników SQLITE_DATA_*, aby umożliwić pobieranie typu danych kolumny. (I1985c, b/369636251)

Wersja 2.7.0-alpha09

2 października 2024 r.

androidx.room:room-*:2.7.0-alpha09 został zwolniony. Wersja 2.7.0-alpha09 zawiera te komity.

Poprawki błędów

  • Rozwiązano problem z implementacją room-paging w KPM, który powodował Error code: 8, message: attempt to write a readonly database z powodu rozpoczęcia transakcji zapisu na połączeniu odczytu. (b/368380988)

Wersja 2.7.0-alpha08

18 września 2024 r.

androidx.room:room-*:2.7.0-alpha08 został zwolniony. Wersja 2.7.0-alpha08 zawiera te komity.

Nowe funkcje

  • Artefakty room-paging zostały przeniesione, aby były zgodne z KMP. (Ib8756, b/339934824)
  • Interfejs API invalidationTrackerFlow() został udostępniony jako interfejs własny InvalidationTracker.createFlow() i jest teraz dostępny w przypadku zbiorów źródłowych innych niż Android w projektach KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)

Zmiany w interfejsie API

  • Wszystkie ostrzeżenia i komunikaty o błędach w Room, które zawierają słowo Cursor, zostały usunięte lub zastąpione, ponieważ Cursor nie jest już odpowiednim ogólnym terminem do użycia w wersji Room w KMP. (Id8cd9, b/334087492)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że Room KMP próbował wygenerować kod za pomocą UUID na platformach innych niż JVM. (b/362994709)
  • Rozwiązaliśmy problem z wtyczką Room Gradle, który powodował błąd, np. „Nie można zmienić atrybutów konfiguracji… po zablokowaniu jej na potrzeby mutacji” podczas używania w projekcie KMP z Compose Multiplatform. (b/343408758)

Wersja 2.7.0-alpha07

21 sierpnia 2024 r.

androidx.room:room-*:2.7.0-alpha07 został zwolniony. Wersja 2.7.0-alpha07 zawiera te komity.

Nowe funkcje

  • Wtyczka Gradle Room będzie teraz automatycznie dodawać wyeksportowane schematy do źródeł zasobów testu Android Instrumentation, aby można było ich używać w MigrationTestHelper.

Poprawki błędów

  • Usunięto błąd związany z generowanym parametrem „actual” funkcji RoomDatabaseConstructor, w którym w funkcji initialize brakowało modyfikatora „actual”, jeśli taka funkcja była też zastąpiona w deklaracji „expect”. (359631627)
  • Rozwiązaliśmy problem polegający na tym, że wygenerowana wartość „actual” (rzeczywista) w elemencie RoomDatabaseConstructor nie odpowiadała widoczności deklaracji „expect” (oczekiwana). (358138953)

Wersja 2.7.0-alpha06

7 sierpnia 2024 r.

androidx.room:room-*:2.7.0-alpha06 został zwolniony. Wersja 2.7.0-alpha06 zawiera te komity.

Zmiany w interfejsie API

  • Zmień konfigurację instancjonowania RoomDatabase w projekcie KMP.

Z powodu modelu kompilacji Kotlin 2.0 strategia odwoływania się do funkcji o nazwie instantiateImpl(), która ma zostać wygenerowana, nie jest już możliwa. Wprowadziliśmy 2 nowe interfejsy API: @ConstructedByRoomDatabaseConstructor, które zastępują strategię instantiateImpl(). Nowa strategia:

  1. Zdefiniuj obiekt expect, który implementuje interfejs RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. Połącz obiekt z deklaracją @Database za pomocą @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. Tworzenie nowej instancji bazy danych bez przekazywania argumentu fabryka

      fun createNewDatabase(path: String) =
        Room.databaseBuilder<AppDatabase>(name = path)
          .setDriver(BundledSQLiteDriver())
          .setQueryCoroutineContext(Dispatchers.IO)
          .build()
    

Rozwiązano problemy b/316978491, b/338446862 i b/342905180

  • Obsługa funkcji @RawQuery w Room KMP dzięki dodaniu nowego interfejsu API o nazwie RoomRawQuery, który jest podobny do funkcji SupportSQLiteQuery pod względem przechowywania w surowym ciągu znaków SQL i funkcji służącej do wiązania argumentów w wyrażeniu. Funkcja z adnotacją @RawQuery może teraz przyjmować jako pojedynczy parametr RoomRawQuery. (Iea844, b/330586815)
  • Dodaj przeciążenie metody setQueryCallback(), która przyjmuje argument CoroutineContext. (Id66ff, b/309996304)
  • Dodano obsługę linuxArm64 celów Kotlin Multiplatform (I139d3, b/338268719)

Poprawki błędów

  • Rozwiązanie problemu polegającego na tym, że Room nieprawidłowo generował wywołanie recursiveFetchArrayMap w przypadku celów innych niż Android. (710c36, b/352482325)
  • Rozwiązaliśmy problem, który powodował, że w ramach projektu KMP Room czasami wyrzucał wyjątek o „przekroczeniu limitu czasu próby połączenia”. (fa72d0, b/347737870)
  • Rozwiązanie problemu z automatycznymi migracjami, które zbyt wcześnie sprawdzały obce klucze, zanim inne tabele zmieniły swoje schematy, aby dostosować je do nowych obcych kluczy. (7672c0, b/352085724)

Wersja 2.7.0-alpha05

10 lipca 2024 r.

androidx.room:room-*:2.7.0-alpha05 został zwolniony. Wersja 2.7.0-alpha05 zawiera te komity.

Zmiany w interfejsie API

  • Zmieniono nazwę SQLiteKt na SQLite, a BundledSQLiteKt na BundledSQLite. (I8b501)

Poprawki błędów

  • Naprawiliśmy błąd, który powodował, że RoomDatabase blokował się lub generował błąd z ze względu na limit czasu połączenia podczas korzystania z AndroidSQLiteDriver.

Wersja 2.7.0-alpha04

12 czerwca 2024 r.

androidx.room:room-*:2.7.0-alpha04 został zwolniony. Wersja 2.7.0-alpha04 zawiera te komity.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że procesor adnotacji Room generował niezgodny kod KMP, gdy w DAO zdefiniowano typ zwracany wielomapy. (b/340983093)
  • Rozwiązaliśmy problem, który powodował, że Room nie mógł znaleźć implementacji wygenerowanej bazy danych, jeśli klasa z adnotacjami @Database nie miała pakietu. (b/342097292)
  • Naprawiono błąd, który powodował, że włączenie automatycznego zamykania i unieważniania wielu wystąpień czasami powodowało błąd ConcurrentModificationException, gdy baza danych została zamknięta automatycznie z powodu braku aktywności.

Wersja 2.7.0-alpha03

29 maja 2024 r.

androidx.room:room-*:2.7.0-alpha03 został zwolniony. Wersja 2.7.0-alpha03 zawiera te komity.

Poprawki błędów

  • Naprawiono różne problemy dotyczące Kotlina 2.0 i KSP 2.0. Pamiętaj, że Kotlin 2.0 z obsługą KSP 2 nie jest jeszcze gotowy, a zespół pracuje nad różnymi interfejsami API i zmianami zachowania w nowym kompilatorze. (b/314151707)

Wersja 2.7.0-alpha02

14 maja 2024 r.

androidx.room:room-*:2.7.0-alpha02 został zwolniony. Wersja 2.7.0-alpha02 zawiera te komity.

Poprawki błędów

  • Rozwiązaliśmy różne problemy z KSP.

Wersja 2.7.0-alpha01

1 maja 2024 r.

androidx.room:room-*:2.7.0-alpha01 został zwolniony. Wersja 2.7.0-alpha01 zawiera te komity.

Nowe funkcje

  • Obsługa Kotlin Multiplatform (KMP): w tej wersji biblioteka Room została przebudowana, aby stała się biblioteką Kotlin Multiplatform (KMP). Chociaż wciąż jest jeszcze wiele do zrobienia, w tej wersji wprowadzamy nową wersję pokoju, w której większość funkcji została „ujednolicona” (czyli udostępniona na wielu platformach). Obecnie obsługiwane platformy to Android, iOS, JVM (na komputery), natywny Mac i natywny Linux. W nadchodzących wersjach Room zostaną dodane brakujące funkcje na nowo obsługiwanych platformach.

Więcej informacji o tym, jak zacząć korzystać z Room KMP, znajdziesz w oficjalnej dokumentacji Room KMP.

  • Generowanie kodu Kotlina w KSP jest domyślnie włączone, jeśli przetwarzanie odbywa się za pomocą KSP. W przypadku projektów KAPT lub Java Room nadal będzie generować źródła w Javie.

Zmiany w interfejsie API

  • Dodano przeciążenie funkcji Room.databaseBuilder(), która przyjmuje parametr lambda przeznaczony do użycia z funkcja generowana przez Room. Ma to na celu uniknięcie korzystania z odzwierciedlenia podczas tworzenia instancji wygenerowanej implementacji RoomDatabase. Przykładowe zastosowanie:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • Do kreatora dodano interfejs API do konfigurowania pokoju z CoroutineContext: RoomDatabase.Builder.setQueryCoroutineContext. Pamiętaj, że RoomDatabase można skonfigurować tylko za pomocą wykonawców używających setQueryExecutor lub w kontekście coroutine, ale nie obu jednocześnie.
  • Dodano interfejs API do konfigurowania pokoju za pomocą sterownika SQLite: RoomDatabase.Builder.setDriver(). Więcej informacji o interfejsie API SQLite Driver znajdziesz w dokumentacji SQLite KMP.
  • Dodano interfejsy API umożliwiające dostęp do podstawowego interfejsu SQLiteConnection z interfejsów API sterownika: RoomDatabase.useReaderConnectionRoomDatabase.useWriterConnection.
  • Funkcje zwracające informacje o pokoju mają teraz przeciążoną wersję, która zwraca SQLiteConnection zamiast SupportSQLiteDatabase. Te ustawienia mają być zastąpione podczas migracji do projektu KMP. Więcej informacji o przenoszeniu zastosowań Room w aplikacji na Androida do wspólnego modułu KMP znajdziesz w przewodniku po migracji. Wywołania zwrotne:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • Element KTX androidx.room:room-ktx został scalony z elementem androidx.room:room-runtime wraz ze wszystkimi jego interfejsami API. Element jest teraz pusty. Usuń je z listy zależności.

Wersja 2.6

Wersja 2.6.1

29 listopada 2023 r.

androidx.room:room-*:2.6.1 został zwolniony. Wersja 2.6.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem w generowanym kodzie, w którym domyślna wartość kolumn podwójnych w elementach EntityCursorConverter była ustawiana na 0 zamiast na 0,0. Dodano też potencjalną poprawkę dla podobnego przypadku krawędzi dla kolumn typu Float. (Id75f5, b/304584179)
  • Wyjątki rzucane przez wczytywanie PagingSource będą teraz propagowane jako LoadStateUpdateLoadResult.Error zawierającym Throwable. Ten stan błędu można zaobserwować w sekcjach PagingDataAdapter.loadStateFlow(Views) lub LazyPagingItems.loadState(Compose). Pamiętaj, że jest to zmiana zachowania. Wcześniej błędy wczytywania były przekazywane jako wyjątek przez metodę dao, która wywołała wczytywanie. (I93887, b/302708983)

Wersja 2.6.0

18 października 2023 r.

androidx.room:room-*:2.6.0 został zwolniony. Wersja 2.6.0 zawiera te commity.

Ważne zmiany od wersji 2.5.0

  • Opcja włączenia generowania kodu Kotlina (czyli „Kotlin CodeGen”) jest teraz dostępna w Room KSP. (4297ec0). Aby włączyć Kotlin CodeGen w Room, dodaj nazwę opcji room.generateKotlin do opcji procesora dla KSP. Więcej informacji o przekazywaniu opcji procesora do KSP znajdziesz w dokumentacji KSP.

Uwaga: podczas korzystania z Kotlin CodeGen należy pamiętać, że zostały dodane dodatkowe ograniczenia. W Kotlinie nie można używać abstrakcyjnych właściwości jako metod getera DAO ani zapytań DAO. Zamiast tego należy je przepisać jako funkcje, aby uniknąć błędnego przekonania, że wartość właściwości jest niezmienna i ma ustalony wynik. Kolejnym dodanym ograniczeniem jest to, że w Room dla Kotlin CodeGen nie są już dozwolone typy zwracania kolekcji Nullable.

Ostrzeżenie: korzystanie z Kotlin CodeGen może spowodować, że Twoje projekty będą bardziej restrykcyjne pod względem możliwości wystąpienia wartości null. W Kotlin CodeGen ważna jest możliwość wystąpienia wartości null w argumentach typu, podczas gdy w Java jest ona w większości ignorowana. Załóżmy np., że masz typ zwracany „Flow<foo>” i tabela jest pusta. W generowaniu kodu w języku Java nie spowoduje to żadnych problemów, ale w generowaniu kodu w języku Kotlin pojawi się błąd. Aby tego uniknąć, użyj instrukcji `Flow<foo?\>`, zakładając, że zostanie zwrócona wartość null. </foo?\></foo\>

  • Do Room dodano nowy artefakt wtyczki Gradle dla Room o identyfikatorze androidx.room, który rozwiązuje różne dotychczasowe problemy w Room dotyczące danych wejściowych i wyjściowych schematów za pomocą opcji procesora adnotacji Gradle. Więcej informacji znajdziesz w informacjach o wersji 2.6.0-alpha02 Room.
  • Klasy wartości w elementach pokoju są teraz obsługiwane w przypadku KSP. (4194095)
  • W Room obsługiwane są teraz zagnieżdżone typy zwracane mapy w funkcjach DAO. (I13f48, 203008711)

Wersja 2.6.0-rc01

20 września 2023 r.

androidx.room:room-*:2.6.0-rc01 został zwolniony. Wersja 2.6.0-rc01 zawiera te commity.

Wersja 2.6.0-beta01

23 sierpnia 2023 r.

androidx.room:room-*:2.6.0-beta01 został zwolniony. Wersja 2.6.0-beta01 zawiera te commity.

Poprawki błędów

  • Obsługa specjalnego przypadku wyjątku SQLite podczas operacji upsert, gdy podczas operacji upsert wystąpił wyjątek 2067 SQLITE_CONSTRAINT_UNIQUE, upsert powinien wykonać aktualizację. (If2849, b/243039555)

Wersja 2.6.0-alpha03

9 sierpnia 2023 r.

androidx.room:room-*:2.6.0-alpha03 został zwolniony. Wersja 2.6.0-alpha03 zawiera te commity.

Nowe funkcje

  • W Room obsługiwane są teraz zagnieżdżone typy zwracane mapy w funkcjach DAO. (I13f48, 203008711)

Zmiany w interfejsie API

  • Utworzono nowy typ adnotacji o nazwie @MapColumn, który zastępuje wycofany typ @MapInfo. W przypadku każdej nazwy kolumny (keyColumnName, valueColumnName lub obie) podanej w adnotacji @MapInfo musisz zadeklarować adnotację @MapColumn z samym columnName i użyć adnotacji w argumencie o określonym typie, do którego się odwołujesz (klucz lub wartość mapy) w typie zwracanym funkcji DAO. Dzieje się tak, ponieważ adnotacja @MapColumn jest używana bezpośrednio w argumencie type w typie zwracanym funkcji DAO, a nie w samej funkcji, np. @MapInfo. Więcej informacji znajdziesz w dokumentacji @MapColumn. (Ib0305, b/203008711)
  • Zaktualizowano pliki interfejsu API, aby dodać adnotacje do pominięcia zgodności (I8e87a, b/287516207).
  • Interfejsy API wtyczki Room Gradle zostały zaktualizowane, aby nie wymagały zawsze konfiguracji dla poszczególnych wariantów. Oznacza to, że wtyczka może akceptować globalne położenie dla wszystkich wariantów bez tworzenia wielu katalogów, co umożliwia płynniejsze migracje, ale też wystarczającą elastyczność, aby ręcznie konfigurować wariacje lub schematy typu kompilacji, zachowując przy tym zalety wtyczki (kompilacje możliwe do odtworzenia i przechowywania w pamięci podręcznej). (I09d6f, b/278266663)

Poprawki błędów

  • Usunęliśmy potencjalną lukę w zabezpieczeniach związaną z wyciekiem pamięci w QueryInterceptorStatement. (I193d1)
  • Naprawiono nieprawidłowe działanie funkcji QueryInterceptorDatabase execSQL(). (Iefdc8)

Wersja 2.6.0-alpha02

21 czerwca 2023 r.

androidx.room:room-*:2.6.0-alpha02 został zwolniony. Wersja 2.6.0-alpha02 zawiera te commity.

Wtyczka Gradle do pokoju

Ta nowa wersja zawiera nowy artefakt dla wtyczki Room Gradle o identyfikatorze androidx.room, który rozwiązuje różne istniejące problemy w Room dotyczące danych wejściowych i wyjściowych schematów za pomocą opcji procesora adnotacji Gradle. Wtyczka Room Gradle konfiguruje projekt tak, aby wygenerowane schematy, które są używane do automatycznej migracji i są wyjściem zadań kompilacji, były prawidłowo skonfigurowane pod kątem możliwości odtworzenia i zapisywania w pamięci podręcznej. Wtyczka zawiera język DSL, który umożliwia konfigurowanie podstawowej lokalizacji schematu:

room {
    schemaDirectory("$projectDir/schemas/")
}

Następnie wtyczka skonfiguruje kompilator Room i różne zadania kompilacji oraz jego backendy (javac, KAPT, KSP), aby generować pliki schematu w folderach z dodatkowymi informacjami, np. schemas/flavorOneDebug/com.package.MyDatabase/1.json. Jak zwykle te pliki są sprawdzane w repozytorium, aby można było ich używać do weryfikacji i automatycznej migracji. Po przejściu na korzystanie z wtyczki zamiast opcji procesora adnotacji istniejące pliki schematu należy skopiować do wygenerowanych katalogów wersji utworzonych przez wtyczkę. Jest to jednorazowa operacja migracji, którą należy wykonać ręcznie. Dokumentacja schematu na stronie developers.android.com zostanie zaktualizowana w przyszłości, gdy uwzględnimy opinie użytkowników i ustabilizujemy działanie wtyczki.

Zmiany w interfejsie API

  • RoomDatabase.QueryCallback został zdefiniowany jako interfejs funkcjonalny umożliwiający wykorzystanie konwersji SAM. (Iab8ea, b/281008549)

Poprawki błędów

  • Rozwiązanie problemu, który występuje podczas tworzenia instancji bazy danych w Robolectric po migracji źródeł Room z języka Java na Kotlin. (Ic053c, b/274924903)

Wersja 2.6.0-alpha01

22 marca 2023 r.

androidx.room:room-*:2.6.0-alpha01 został zwolniony. Wersja 2.6.0-alpha01 zawiera te commity.

Nowe funkcje

  • Obsługa klas wartości w Room w KSP Pokój może teraz obsługiwać klasy wartości w elementach. (4194095)
  • Generowanie kodu Kotlin(czyli „Kotlin CodeGen”) można teraz włączyć w Room (4297ec0). Aby włączyć Kotlin CodeGen w Room, dodaj nazwę opcji room.generateKotlin do opcji procesora dla KSP. Więcej informacji o przekazywaniu opcji procesora do KSP znajdziesz w dokumentacji KSP.

Uwaga: podczas korzystania z Kotlin CodeGen należy pamiętać, że zostały dodane dodatkowe ograniczenia. W Kotlinie nie można używać abstrakcyjnych właściwości jako metod getera DAO ani zapytań DAO. Zamiast tego należy je przepisać jako funkcje, aby uniknąć błędnego przekonania, że wartość właściwości jest niezmienna i ma ustalony wynik. Kolejnym dodanym ograniczeniem jest to, że w Room dla Kotlin CodeGen nie są już dozwolone typy zwracania kolekcji Nullable.

Ostrzeżenie: korzystanie z Kotlin CodeGen może spowodować, że Twoje projekty będą bardziej restrykcyjne pod względem możliwości wystąpienia wartości null. W Kotlin CodeGen ważna jest możliwość wystąpienia wartości null w argumentach typu, podczas gdy w Java jest ona w większości ignorowana. Załóżmy np., że masz typ zwracany „Flow<foo>” i tabela jest pusta. W generowaniu kodu w języku Java nie spowoduje to żadnych problemów, ale w generowaniu kodu w języku Kotlin pojawi się błąd. Aby tego uniknąć, użyj instrukcji `Flow<foo?\>`, zakładając, że zostanie zwrócona wartość null. </foo?\></foo\>

Zmiany w interfejsie API

  • Ochrona przed bezcelowym używaniem kolekcji z wartościami opcjonalnymi w typach zwracanych przez metody DAO. (I777dc, b/253271782, b/259426907)
  • Dodaj interfejs API do tworzenia przepływu, który emituje zmiany śledzenia unieważnienia. Interfejs API jest przydatny do tworzenia strumieni, które muszą reagować na zmiany w bazie danych. (I8c790, b/252899305)

Poprawki błędów

  • Nie zezwalaj na abstrakcyjne właściwości jako gettery DAO ani zapytania DAO w generowaniu kodu Kotlin. Zamiast tego powinny one zostać przepisane jako funkcje, aby uniknąć błędnego przekonania, że wartość właściwości jest niezmienna i ma stały wynik. (If6a13, b/127483380, b/257967987)

Wersja 2.5.2

Wersja 2.5.2

21 czerwca 2023 r.

androidx.room:room-*:2.5.2 został zwolniony. Wersja 2.5.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązanie problemu z niezgodnością z kotlinx-metadata-jvm. (386d5c)
  • Rozwiązaliśmy problem, który powodował błąd w Room podczas używania w teście Robolectric. (f79bea, b/274924903)

Wersja 2.5.1

Wersja 2.5.1

22 marca 2023 r.

androidx.room:room-*:2.5.1 został zwolniony. Wersja 2.5.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Nie sprawdzaj katalogu nadrzędnego bazy danych w FrameworkSQLiteHelper, jeśli baza danych jest już otwarta. (5de86b8)
  • Aby sprawdzić, czy baza danych jest już otwarta, użyj instrukcji isOpenInternal. (e91fb35)
  • Ulepszono obsługę okna reentrant w funkcji acquireTransactionThread() w Rooms. (219f98b). Podczas zawieszania transakcji Room używa wątku z wykonawcy transakcji, uruchamia w nim pętlę zdarzeń i przesyła do niej zawieszone operacje bazy danych, aby były one zakapsułowane w korobowej transakcji. Zwykle wątek transakcji jest inny niż wątek rozpoczynający transakcję, ale w niektórych przypadkach są one takie same. Aby obsłużyć takie przypadki ponownego wywołania, funkcja withTransaction() została przebudowana, aby nie polegać już na zadaniu sterującym. Zamiast tego będzie ona wykonywać blok zawieszania transakcji z poziomu runBlocking w wątku transakcji.

Wersja 2.5.0

Wersja 2.5.0

22 lutego 2023 roku

Funkcje androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0androidx.room:room-paging-rxjava3:2.5.0 są dostępne. Wersja 2.5.0 zawiera te commity.

Wersja 2.5.0

11 stycznia 2023 r.

androidx.room:room-*:2.5.0 został zwolniony. Wersja 2.5.0 zawiera te commity.

Ważne zmiany od wersji 2.4.0

  • Wszystkie źródła room-runtime zostały przekonwertowane z języka Java na Kotlin. Pamiętaj, że jeśli Twój kod jest w Kotlinie, możesz napotkać problemy ze zgodnością źródeł z powodu konwersji biblioteki na Kotlin. Na przykład zmiana w znanym źródle, która powoduje niezgodność, polega na tym, że w funkcji InvalidationTracker musisz teraz zadeklarować onInvalidate() w funkcji Observer, aby mieć parametr typu Set, a nie MutableSet. Ponadto niektóre metody gettera zostały przekonwertowane na właściwości wymagające składni dostępu do właściwości w plikach Kotlin. Jeśli zauważysz istotne niezgodności, zgłoś błąd.
  • Dodano nową adnotację skrótu @Upsert, która próbuje wstawić element, gdy nie ma konfliktu dotyczącego unikalności, lub zaktualizować element, jeśli występuje konflikt. (I7aaab, b/241964353)
  • Do obsługi funkcji pagingu pokoi dodano nowe komponenty room-paging-rxjava2, room-paging-rxjava3 i room-paging-guava.
  • Dodano interfejsy API do udostępniania nazw tabel kluczy i wartości w celu rozróżnienia w @MapInfo (Icc4b5)

Wersja 2.5.0-rc01

7 grudnia 2022 r.

androidx.room:room-*:2.5.0-rc01 został zwolniony. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.

  • Ta wersja jest identyczna z 2.5.0-beta02.

Wersja 2.5.0-beta02

9 listopada 2022 r.

androidx.room:room-*:2.5.0-beta02 został zwolniony. Wersja 2.5.0-beta02 zawiera te commity.

Zmiany w interfejsie API

  • Poprawiliśmy różne interfejsy API, które przyjmują argumenty zapytania z invariant (Array<Any?>) na contravariant (Array<out Any?>), aby dopasować zachowanie tablicy do Java. (b/253531073)

Wersja 2.5.0-beta01

5 października 2022 r.

androidx.room:room-*:2.5.0-beta01 został zwolniony. Wersja 2.5.0-beta01 zawiera te commity.

Zmiany w interfejsie API

  • Ogranicz minimalną wersję obsługującą @Upsert do interfejsu API 16. Wynika to z niemożności wykrycia konfliktu ograniczeń klucza głównego w starszych interfejsach API. (I5f67f, b/243039555)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował nieprawidłowe wyeksportowanie tabel cieni do plików schematu .json, co powodowało ich uszkodzenie. (I4f83b, b/246751839)

Wersja 2.5.0-alpha03

24 sierpnia 2022 r.

androidx.room:room-*:2.5.0-alpha03 został zwolniony. Wersja 2.5.0-alpha03 zawiera te commity.

Nowe funkcje

  • Dodano nową adnotację skrótu @Upsert, która próbuje wstawić element, gdy nie ma konfliktu dotyczącego unikalności, lub zaktualizować element, jeśli występuje konflikt. (I7aaab, b/241964353)

Poprawki błędów

  • Podczas automatycznej migracji podczas sprawdzania ograniczeń klucza obcego Room zwraca teraz wartość SQLiteConstraintException zamiast IllegalStateException. (I328dd)
  • Naprawić zmianę w źródle Kotlina, która nie jest zgodna z źródłem, w przypadku metod gettera / właściwości getOpenHelper, getQueryExecutorgetTransactionExecutor. (Iad0ac)

Wersja 2.5.0-alpha02

1 czerwca 2022 r.

androidx.room:room-*:2.5.0-alpha02 został zwolniony. Wersja 2.5.0-alpha02 zawiera te commity.

Nowe funkcje

Zmiany w interfejsie API

  • Wszystkie pliki room-runtime zostały przekonwertowane z języka Java na Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)

    Uwaga: w związku z konwersją biblioteki na Kotlina mogą wystąpić problemy ze zgodnością źródeł. Jeśli Twój kod był w Kotlinie i wywoływał starą wersję Room, nowa wersja będzie musiała obsługiwać te przypadki. Na przykład zmiana w znanym źródle, która powoduje niezgodność, polega na tym, że w funkcji InvalidationTracker musisz teraz zadeklarować onInvalidate() w funkcji Observer, aby mieć parametr typu Set, a nie MutableSet.

  • Dodano interfejsy API do udostępniania nazw tabel kluczy i wartości w celu rozróżnienia w @MapInfo (Icc4b5)
  • Rozwiązanie problemu ze zgodnością ze źródłem, aby ponownie zezwolić na @Ignore w metodach dostępu do właściwości. (Ifc2fb)

Poprawki błędów

  • Heurystyczny algorytm rozwiązywania problemu zduplikowanych kolumn. Room będzie teraz próbować rozwiązywać niejednoznaczne kolumny w zapytaniu wielomapowym. Umożliwia to poprawne mapowanie złączeń z tabelami o tej samej nazwie do obiektu danych z wynikiem. (I4b444, b/201306012, b/212279118)

Wersja 2.5.0-alpha01

23 lutego 2022 r.

androidx.room:room-*:2.5.0-alpha01 został zwolniony. Wersja 2.5.0-alpha01 zawiera te commity.

Zmiany w interfejsie API

  • Rozwiązaliśmy problem, który powodował, że w źródłach kodu Kotlin nie było wymuszane używanie Room @IntDef. (I75f41, b/217951311)
  • Rozwiązaliśmy problem ze zgodnością ze źródłem, aby ponownie zezwolić na użycie @Query w metodach pobierających właściwości. (I0a09b)
  • Przekształcono klasę room-common z języka Java na Kotlin. (I69c48, b/206858235)

    Uwaga: podczas konwertowania biblioteki na Kotlina niektóre właściwości zostały przeniesione do obiektów towarzyszących, więc możesz napotkać problemy z niezgodnością źródeł. Jeśli Twój kod był w języku Kotlin i wywoływał starszą wersję Room, nowa wersja będzie potrzebować przywołania sufiksu „.Companion” podczas uzyskiwania dostępu do tych właściwości.

  • Przekształcono funkcję room-migration z Java na Kotlin. (I2724b, b/206858622)
  • Przekonwertowano pliki paging w folderze room-runtime z języka Java na Kotlin. (I82fc8, b/206859668)
  • Dodano interfejs API do blokowania i używania wielu procesów na poziomie FrameworkSQLite*, aby chronić migracje i pierwotne tworzenie baz danych w wielu procesach. (Ied267, b/193182592)

Poprawki błędów

  • Dodaliśmy obsługę właściwości wewnętrznych w źródłach w języku Kotlin. Jest to niewielkie zmiany zachowania w Room, gdzie podczas dopasowywania właściwości do funkcji jako funkcji pobierających i zmieniających wartości będzie używana nazwa źródłowa funkcji (wcześniej używano nazwy funkcji w JVM, która jest inna w przypadku funkcji i właściwości wewnętrznych). Jeśli używasz niestandardowych adnotacji @JvmName, aby dopasowywać metody gettera/settera do prywatnych właściwości, sprawdź wygenerowany kod po aktualizacji (If6531, b/205289020).

Wersja 2.4.3

Wersja 2.4.3

27 lipca 2022 roku

androidx.room:room-*:2.4.3 został zwolniony. Wersja 2.4.3 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że Room nie rozpoznawał funkcji zawieszania w Kotlinie 1.7 (b/236612358).

Wersja 2.4.2

Wersja 2.4.2

23 lutego 2022 r.

androidx.room:room-*:2.4.2 został zwolniony. Wersja 2.4.2 zawiera te commity.

Poprawki błędów

  • Rozwiązano problem z generowaniem kodu dla funkcji zawieszania Dao @Transaction z ciałem generującym domyślną metodę interfejsu z powodu kompilacji z użyciem -Xjvm-default=all lub równoważnego narzędzia. (Ia4ce5)
  • Rozwiązanie błędu, w którym Room generuje kod dla metody zapytania o typ zwracania Array<ByteArray>. (If086e, b/213789489)

Wersja 2.4.1

Wersja 2.4.1

12 stycznia 2022 r.

androidx.room:room-*:2.4.1 został zwolniony. Wersja 2.4.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Dodaliśmy obsługę właściwości wewnętrznych w źródłach w języku Kotlin. Jest to niewielkie zmiany zachowania w Room, gdzie podczas dopasowywania właściwości do funkcji jako funkcji pobierających i zmieniających wartości będzie używana nazwa źródłowa funkcji (wcześniej używano nazwy funkcji w JVM, która jest inna w przypadku funkcji i właściwości wewnętrznych). Jeśli używasz niestandardowych adnotacji @JvmName, aby dopasowywać metody gettera/settera do prywatnych właściwości, sprawdź wygenerowany kod po aktualizacji (If6531, b/205289020).

Wersja 2.4.0

Wersja 2.4.0

15 grudnia 2021 roku

androidx.room:room-*:2.4.0 został zwolniony. Wersja 2.4.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.3.0

  • Automatyczne migracje: Room udostępnia teraz interfejs API do automatycznego generowania migracji, o ile schematy są eksportowane. Aby Room wiedziało, że ma wygenerować automatyczną migrację, możesz użyć nowej właściwości @Database#autoMigrations, aby określić wersje, między którymi ma nastąpić automatyczna migracja. Gdy Room potrzebuje dodatkowych informacji dotyczących tabel i zmian nazw lub usunięcia kolumn, adnotacja @AutoMigration może zadeklarować klasę specyfikacji zawierającą takie dane wejściowe. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją @AutoMigration.
  • Wstrzykiwanie zależności w ramach automatycznych migracji: @ProvidedAutoMigrationSpec to nowy interfejs API do deklarowania, że AutoMigrationSpec zostanie dostarczony w czasie działania za pomocą RoomDatabase.Builder#addAutoMigrationSpec(). Umożliwia to frameworkowi do wstrzykiwania zależności udostępnianie takich specyfikacji, gdy potrzebne są złożone zależności.
  • Obsługa narzędzia do testowania migracji w przypadku automatycznych migracji: funkcja MigrationTestHelper w Room została zaktualizowana, aby obsługiwać automatyczne migracje. Dodano nowy konstruktor interfejsu API, który przyjmuje testowaną klasę bazy danych. Dzięki temu pomocnik może automatycznie dodawać migracje automatyczne w ten sam sposób podczas runMigrationsAndValidate.
  • Obsługa wywołania pokoju: udostępniono androidx.room:room-paging, który zapewnia obsługę natywnej funkcji Paging 3.0 w przypadku zapytań dotyczących pokoju zwracających androidx.paging.PagingSource.
  • Metody zapytań relacyjnych: Room obsługuje teraz typy zwracane multimapy @Dao, które są przydatne w przypadku instrukcji JOIN. Obsługiwane typy map wieloelementowych to Map, SparseArray, LongSparseArray oraz Guava ImmutableMap, ImmutableSetMultimapImmutableListMultimap.

Wersja 2.4.0-rc01

1 grudnia 2021 r.

androidx.room:room-*:2.4.0-rc01 został zwolniony. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.

Nowe funkcje

  • Zaktualizuj zależność Room od KSP na 1.6.0-1.0.1, aby obsługiwać Kotlin 1.6

Wersja 2.4.0-beta02

17 listopada 2021 r.

androidx.room:room-*:2.4.0-beta02 został zwolniony. Wersja 2.4.0-beta02 zawiera te commity.

Nowe funkcje

  • Dodaliśmy obsługę typów SparseArray i LongSparseArray w funkcji @MapInfo. (Ic91a2b/138910317)

Poprawki błędów

  • Dodaliśmy nowy analizator TypeConverter, który uwzględnia informacje o możliwości wystąpienia wartości null w typach. Te informacje są dostępne tylko w KSP, dlatego domyślnie są włączone tylko w tym narzędziu. Jeśli powoduje ona jakiekolwiek problemy, możesz ją wyłączyć, przekazując parametr room.useNullAwareTypeAnalysis=false procesorowi adnotacji. Jeśli tak się stanie, zgłoś błąd, a ten flaga zostanie w przyszłości usunięta. W przypadku nowego analizatora TypeConverter zalecamy podawanie tylko TypeConverters, które przyjmują wartości niezerowe, ponieważ nowy analizator ma możliwość owijania ich za pomocą sprawdzania wartości null. Pamiętaj, że ta zmiana nie ma wpływu na użytkowników, którzy używają procesorów adnotacji KAPT lub Java (w przeciwieństwie do KSP), ponieważ nie mają informacji o możliwości wystąpienia wartości null w typach. (Ia88f9, b/193437407)
  • Rozwiązanie błędu, który powodował, że Room nie mógł zostać skompilowany z błędem SQL, gdy element FTS zadeklarował użycie zliczarki ICU. (I00db9, b/201753224)
  • Rozwiązano problem z automatyczną migracją dotyczący nowej kolumny dodanej do zaimplementowanego elementu w różnych wersjach. (I5fcb1b/193798291)
  • Rozwiązaliśmy problem z typami zwracanymi przez relacyjną metodę zapytań w zapytaniach LEFT JOIN. Dzięki tym zmianom w przypadku mapowania 1-wiele kolekcja zwracana dla klucza nie będzie zawierać obiektu nieprawidłowej wartości, jeśli nie zostanie on znaleziony w kursorze. Jeśli nie zostanie znaleziona żadna prawidłowa wartość, klucz zostanie zmapowany na pustą kolekcję. (Id5552b/201946438)
  • Rozwiązaliśmy problem z automatyczną migracją, który polegał na tym, że w nazwach kolumn nie były prawidłowo zmieniane znaczenia słów kluczowych SQLite. (Idbed4b/197133152)

Wersja 2.4.0-beta01

13 października 2021 r.

androidx.room:room-*:2.4.0-beta01 został zwolniony. Wersja 2.4.0-beta01 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że podczas automatycznej migracji nie dodawano nowych kolumn, gdy inna tabela w ramach tej samej automatycznej migracji miała nową kolumnę o tej samej nazwie. (Ia5db5, b/200818663)
  • Implementacja PagingSource wygenerowana przez room-paging używa teraz wartości queryExecutor przekazanej przez RoomDatabase.Builder, więc można ją zastąpić zamiast Dispatchers.IO, jak to miało miejsce wcześniej. (Iae259)

Wersja 2.4.0-alpha05

29 września 2021 r.

androidx.room:room-*:2.4.0-alpha05 został zwolniony. Wersja 2.4.0-alpha05 zawiera te commity.

Nowe funkcje

Zmiany w interfejsie API

  • Dodaliśmy nową właściwość do adnotacji TypeConverters, aby umożliwić deweloperom wyłączenie wbudowanych konwerterów Enum i UUID. Domyślnie te konwertery są włączone, ale możesz je wyłączyć w określonym zakresie lub w całej bazie danych. Więcej informacji znajdziesz w dokumentacji TypeConverters. (36ae9e, b/195413406)

  • Obsługa kluczy/wartości innych niż obiekty POJO w przypadku typów zwracanych przez Multimap w interfejsach DAO za pomocą adnotacji @MapInfo. (I4d704)

@MapInfo będzie wymagana, gdy kolumna klucza lub wartości mapy pochodzi z pojedynczej kolumny. Zobacz przykład:

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • Ustaw room-paging jako wymagany element, gdy używasz paging3 w Room. (Ieaffe)

Poprawki błędów

  • Rozwiązanie problemu polegającego na tym, że wyniki zapytań dotyczących wielu map nie były prawidłowo uporządkowane, gdy zapytanie zawierało klauzulę ORDER BY kolumny z klucza mapy. (I6b887)

Darowizna zewnętrzna

  • Dodano nowy interfejs API do określania kolejności indeksów w @Index. Dziękujemy Nikita Zhelonkin. (I033fc)

Wersja 2.4.0-alpha04

21 lipca 2021 r.

androidx.room:room-*:2.4.0-alpha04 został zwolniony. Wersja 2.4.0-alpha04 zawiera te commity.

Nowe funkcje

  • Room obsługuje teraz typy zwracane multimap @Dao, które są przydatne w przypadku instrukcji JOIN. Obsługiwane typy map wieloelementowych to Map oraz ImmutableMap, ImmutableSetMultimapImmutableListMultimap z Guavy.

    Oto przykłady zapytań dotyczących wielu map:

    Mapa relacji jeden-do-jednego

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    Mapa relacji „jeden do wielu” (standardowa mapa wieloelementowa)

    @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId")
    fun getArtistAndAlbums(): Map<Artist, List<Album>>
    

    Wynik wielomapy może być również zawinięty w obsługiwane asynchroniczne typy zwracania, takie jak LiveData, Observable z Rx lub coroutines Flow.

Wywoływanie w pokoju

  • Wersja androidx.room:room-paging została wydana, zapewniając obsługę natywnego Paging 3.0 dla zapytań Room zwracających androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • Ten element zastępuje implementację androidx.paging.PagingSource wygenerowaną przez Room, zastępując ją implementacją opartą na interfejsach API Paging 3.0. Nowa implementacja PagingSource analizuje klucze inaczej, więc każdy klucz podany ręcznie do PagingSource w Room musiałby uwzględniać tę zmianę zachowania, w tym klucz początkowy przekazany przez konstruktor Pagera. Strony zaczną się wczytywać od Key, a pierwszym wczytywanym elementem będzie Key. Jest to inne zachowanie niż dotychczasowe, w którym LoadParams.Refresh.Key traktowane jest jako pozycja przewijania przez użytkownika, a elementy są wczytywane zarówno przed, jak i po kluczu.

  • Ten artefakt jest opcjonalny, a wyłączenie spowoduje powrót do dotychczasowego obsługiwania Paging 3.0, które zostało wprowadzone w Room 2.3. W przyszłej wersji funkcja ta stanie się obowiązkowa dla użytkowników korzystających z pokoju z systemem pagingu 3.0. Aby to zrobić, dodaj nowy artefakt strony pomieszczenia do classpath. Jeśli używasz Gradle, możesz dodać do pliku build.gradle ten fragment kodu:

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

Poprawki błędów

  • Rozwiązanie problemu z automatycznymi migracjami dotyczącym obsługi naruszeń obcych kluczy. (b/190113935)

Wersja 2.4.0-alpha03

16 czerwca 2021 r.

androidx.room:room-*:2.4.0-alpha03 został zwolniony. Wersja 2.4.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • Zaktualizuj Rooma MigrationTestHelper, aby obsługiwał automatyczne migracje. W tym celu udostępnij nowy interfejs konstruktora, który przyjmuje testowaną klasę bazy danych. Dzięki temu pomocnik może automatycznie dodawać migracje automatyczne w ten sam sposób podczas runMigrationsAndValidate.

Poprawki błędów

  • Rozwiązano problem z biblioteką natywną SQLite w Room, aby obsługiwała procesory Apple M1. (b/174695268

  • Rozwiązaliśmy problem polegający na tym, że Room nie generował błędu, gdy typ zwracany przez funkcję @Transaction był typu Flow (I56ddd, b/190075899).

  • Rozwiązanie problemu z automatyczną migracją dotyczącym indeksów. b/177673291

Aktualizacje zależności

  • Obsługa KSP pokoju zależy teraz od KSP 1.5.10-1.0.0-beta01. (1ecb11, b/160322705)

Wersja 2.4.0-alpha02

5 maja 2021 roku

androidx.room:room-*:2.4.0-alpha02 został zwolniony. Wersja 2.4.0-alpha02 zawiera te commity.

Zmiany w interfejsie API

  • @ProvidedAutoMigrationSpec to nowy interfejs API do deklarowania, że AutoMigrationSpec zostanie dostarczony w czasie wykonywania za pomocą RoomDatabase.Builder#addAutoMigrationSpec(). Umożliwia to frameworkowi do wstrzykiwania zależności udostępnianie takich specyfikacji, gdy potrzebne są złożone zależności.

Poprawki błędów

  • Rozwiązaliśmy problem z automatycznymi migracjami, w których @DatabaseView nie były prawidłowo ponownie tworzone.

Darowizna zewnętrzna

  • Rozwiązaliśmy problem w JournalMode.TRUNCATE Pokoju, w którym funkcja InvalidationTracker callback była czasami wywoływana nieprawidłowo, zbyt późno lub wcale. Dziękujemy: Uli Bubenheimer | bubenheimer@users.noreply.github.com (b/154040286).

Wersja 2.4.0-alpha01

21 kwietnia 2021 r.

androidx.room:room-*:2.4.0-alpha01 został zwolniony. Wersja 2.4.0-alpha01 zawiera te commity.

Nowe funkcje

  • Automatyczne migracje: Room udostępnia teraz interfejs API do automatycznego generowania migracji, o ile schematy są eksportowane. Aby Room wiedziało, że ma wygenerować automatyczną migrację, możesz użyć nowej właściwości @Database#autoMigrations, aby określić wersje, między którymi ma nastąpić automatyczna migracja. Gdy Room potrzebuje dodatkowych informacji dotyczących tabel i zmian nazw lub usunięcia kolumn, adnotacja @AutoMigration może zadeklarować klasę specyfikacji zawierającą takie dane wejściowe. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją @AutoMigration.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował nieprawidłowe sprawdzanie poprawności defaultValue z dodatkowymi nawiasami przez Room. b/182284899

Wersja 2.3.0

Wersja 2.3.0

21 kwietnia 2021 r.

androidx.room:room-*:2.3.0 został zwolniony. Wersja 2.3.0 zawiera te commity.

Ważne zmiany od wersji 2.2.0

  • Wbudowane wsparcie dla typów Enum: jeśli nie zostanie podany żaden typ, Room będzie domyślnie używać konwertera typu Enum na String i odwrotnie. Jeśli konwerter typu dla typu zbiorczego już istnieje, Room będzie używać go zamiast domyślnego.
  • Wywołanie zwrotne zapytania: Room udostępnia teraz ogólny interfejs API wywołania zwrotnego RoomDatabase.QueryCallback, który można wykorzystać do rejestrowania w edycjach debugowania. Wywołanie zwrotne można skonfigurować za pomocą RoomDatabase.Builder#setQueryCallback().
  • Wstępnie skompilowane ulepszenie: Room ma teraz interfejsy API do tworzenia bazy danych z użyciem wstępnie skompilowanej bazy danych odczytanej ze strumienia wejściowego. Umożliwia to m.in. skompresowanie bazy danych w ramach pakietu.
  • Dostarczone konwertery typów: Room ma teraz interfejsy API do udostępniania instancji konwerterów typów, aby aplikacja mogła kontrolować ich inicjowanie. Aby oznaczyć konwerter typu, który zostanie przekazany do Room, użyj nowej adnotacji @ProvidedTypeConverter.
  • Obsługa RxJava3: Room obsługuje teraz typy RxJava3. Podobnie jak w przypadku RxJava2, możesz deklarować metody DAO, których typ zwracania to Flowable, Single, Maybe lub Completable. Dodatkowo dostępny jest nowy artefakt androidx.room:room-rxjava3, który obsługuje RxJava3.
  • Obsługa pagingu 3.0: Room będzie teraz generować implementacje dla metod z adnotacjami @Query, których typ zwracania to androidx.paging.PagingSource.

Wersja 2.3.0-rc01

24 marca 2021 r.

androidx.room:room-*:2.3.0-rc01 został zwolniony. Wersja 2.3.0-rc01 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, który uniemożliwiał wykorzystanie zapytań ścieżki uruchamianej w tle utworzonych przez Room w bloku zawieszania withTransaction. (I797bf)

Wersja 2.3.0-beta03

10 marca 2021 r.

androidx.room:room-*:2.3.0-beta03 został zwolniony. Wersja 2.3.0-beta03 zawiera te commity.

Nowe funkcje

Poprawki błędów

  • Naprawiono błąd polegający na tym, że utworzenie PagingSource w wątku głównym mogło wywołać błąd ANR. (I42b74, b/181221318)
  • Poprawiono widoczność @ExperimentalRoomApi, która jest teraz publiczna, a nie prywatna. (b/181356119)

Darowizna zewnętrzna

  • Umożliw Room akceptowanie typu zwracanego POJO w metodzie DAO z adnotacją @Query, gdy jest ona też opatrzona adnotacją @SkipQueryVerification. Room dołoży wszelkich starań, aby wynik zapytania został przekonwertowany na typ zwracany POJO w taki sam sposób jak w przypadku metody DAO z adnotacją @RawQuery. Dziękujemy „Markus Riegel | hey@marcorei.com” (I45acb).

Wersja 2.3.0-beta02

18 lutego 2021 r.

androidx.room:room-*:2.3.0-beta02 został zwolniony. Wersja 2.3.0-beta02 zawiera te commity.

Nowe funkcje

  • W usłudze Room dostępna jest teraz eksperymentalna obsługa przetwarzania symboli Kotlina KSP.

    KSP zastępuje KAPT i pozwala na uruchamianie procesorów adnotacji natywnie w kompilatorze Kotlina, co znacznie skraca czas kompilacji.

    Aby używać Room z KSP, możesz zastosować wtyczkę Gradle KSP i zastąpić konfigurację kapt w pliku kompilacji parametrem ksp. Na przykład zamiast kapt 'androidx.room:room-compiler:2.3.0-beta02' użyj ksp 'androidx.room:room-compiler:2.3.0-beta02'. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją KMS.

    Pamiętaj, że KSP jest w fazie eksperymentalnej, dlatego zalecamy używanie KAPT w przypadku kodu produkcyjnego. Skrócenie czasu kompilacji ma zastosowanie tylko wtedy, gdy nie ma innych procesorów, które korzystają z KAPT. Znane problemy znajdziesz w problemie b/160322705.

Wersja 2.3.0-beta01

27 stycznia 2021 r.

androidx.room:room-*:2.3.0-beta01 został zwolniony. Wersja 2.3.0-beta01 zawiera te commity.

Nowe funkcje

  • Automatycznie zamykanie baz danych: Room może teraz zamykać bazy danych, do których nie uzyskuje się dostępu po upływie określonego czasu. To jest funkcja eksperymentalna, którą można włączyć, wywołując funkcję RoomDatabase.Builder#setAutoCloseTimeout(). Ta funkcja jest przydatna w przypadku aplikacji z większą liczbą baz danych.

Poprawki błędów

  • Rozwiązano problem, który powodował, że metody Dao z wieloma metodami @Update lub @Delete z różnymi strategiami konfliktowymi generowały kod tylko z jedną z tych strategii, ignorując zdefiniowaną. (/I0b90d, b/176138543)

Wersja 2.3.0-alpha04

16 grudnia 2020 roku

androidx.room:room-*:2.3.0-alpha04 został zwolniony. Wersja 2.3.0-alpha04 zawiera te commity.

Nowe funkcje

  • Room oferuje teraz ogólny interfejs wywołania zwrotnego RoomDatabase.QueryCallback, który można wykorzystać do logowania w edycjach debugowania. Można go użyć, gdy zapytania mają zostać wykonane. Wywołanie zwrotne można skonfigurować za pomocą RoomDatabase.Builder#setQueryCallback(). (Iaa513, b/174478034, b/74877608)
  • Jeśli nie zostanie podany żaden konwerter, Room użyje domyślnie konwertera typu Enum na String i odwrotnie. Jeśli konwerter typu dla typu zbiorczego już istnieje, Room będzie używać go zamiast domyślnego. (b/73132006)

Znany problem

  • Jeśli dla typu Enum istnieje już jednokierunkowy konwerter do odczytu, Room może przypadkowo użyć wbudowanego konwertera ciągu znaków na Enum, co może nie być pożądane. To znany problem, który można rozwiązać, ustawiając dwukierunkowy konwerter. Patrz: b/175707691

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że Room nieprawidłowo wyłączał stopniowe przetwarzanie adnotacji w nowszych wersjach JDK. (b/171387388)
  • Rozwiązaliśmy problem z funkcja Room, która znajdowała wygenerowaną klasę, gdy używano wielu ładowarek klas. Dziękuję za poprawkę „Serendipity | 892449346@qq.com” (b/170141113).
  • Rozwiązaliśmy problem, który powodował, że Room generował nieprawidłowy kod, gdy Kotlin @Dao miał klasę podstawową, której typy ogólne są prymitywne w JVM. (b/160258066)

Darowizna zewnętrzna

  • Jeśli tryb WAL jest włączony, a interfejs API ma co najmniej 16 bitów, pokój będzie domyślnie używać beginTransactionNonExclusive. Dziękujemy Ahmedowi I. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)

Wersja 2.3.0-alpha03

14 października 2020 r.

androidx.room:room-*:2.3.0-alpha03 został zwolniony. Wersja 2.3.0-alpha03 zawiera te commity.

Nowe funkcje

  • Room ma teraz interfejsy API do udostępniania instancji konwerterów typów, aby aplikacja mogła kontrolować ich inicjowanie. Aby oznaczyć konwerter typu, który zostanie przekazany do pokoju, użyj nowej adnotacji @ProvidedTypeConverter. Dziękujemy użytkownikowi „mzgreen yairobbe@gmail.com”. (Ie4fa5, b/121067210)

  • Room ma teraz interfejsy API do tworzenia bazy danych przy użyciu wstępnie skompresowanej bazy danych odczytanej ze strumienia wejściowego. Umożliwia to m.in. skompresowanie bazy danych w ramach pakietu. Dziękujemy użytkownikowi „Ahmed El-Helw” (ahmedre@gmail.com) (3e6792, b/146911060).

Zmiany w interfejsie API

  • Dodano brakujący cel do adnotacji @ForeignKey, aby zapobiec jej używaniu poza adnotacją @Entity. (Iced1e)

  • Pole mCallbacks w tabeli RoomDatabase.java jest teraz ukryte. (d576cb, b/76109329)

Poprawki błędów

  • Zaktualizuj dokumentację TypeConverters, aby doprecyzować, że można jej używać tylko do konwertowania kolumn / pol, a nie wierszy. (I07c56, b/77307836)

  • Zaktualizuj DaoProcessor, aby naprawić błąd kompilatora w przypadku typu super typu ogólnego Dao z „prostymi” typami Kotlina. (Ice6bb, b/160258066)

  • Zaktualizowano dokumentację metod dodawania i usuwania obserwatorów, aby wyjaśnić wątkowanie (Ifd1d9, b/153948821)

  • Rozwiązaliśmy problem z nieprawidłową walidacją przez Room tabel FTS, które deklarowały kolumnę rowid. (d62ebc, b/145858914)

Wkład zewnętrzny

  • Rozwiązanie problemów z lokalizacją w języku tureckim (5746e3) i b/68159494 związanych z wielkimi i małymi literami.

  • Aby uniknąć problemów na Androidzie Lollipop (d1cfc7, b/162431855), zastąp ConcurrentHashMapRoomDatabase wartością Collections.synchronizedMap().

  • Dodaj funkcję wywołania zwrotnego onOpenPrepackagedDatabase, gdy kopiowana jest wstępnie zapakowana baza danych. (I1ba74, b/148934423)

Wersja 2.3.0-alpha02

22 lipca 2020 r.

androidx.room:room-*:2.3.0-alpha02 został zwolniony. Wersja 2.3.0-alpha02 zawiera te commity.

Nowe funkcje

  • Obsługa RxJava3: Room obsługuje teraz typy RxJava3. Podobnie jak w przypadku RxJava2, możesz deklarować metody DAO, których typ zwracania to Flowable, Single, Maybe lub Completable. Dodatkowo dostępny jest nowy artefakt androidx.room:room-rxjava3, który obsługuje RxJava3. (b/152427884)

Zmiany w interfejsie API

  • Deklarowanie obiektu @TypeConverter w klasie obiektu Kotlin jest teraz obsługiwane. (b/151110764)
  • Opcja stopniowego przetwarzania adnotacji w pokoju jest teraz domyślnie włączona. (b/112110217)

Wersja 2.3.0-alpha01

10 czerwca 2020 r.

androidx.room:room-*:2.3.0-alpha01 został zwolniony. Wersja 2.3.0-alpha01 zawiera te commity.

Nowe funkcje

  • Obsługa pagingu 3.0: Room będzie teraz generować implementacje dla @Query adnotowanych metod, których typ zwracania to androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun pagingSource(): PagingSource<Int, User>
    }
    

Zmiany w interfejsie API

  • @RewriteQueriesToDropUnusedColumns to nowa, wygodna adnotacja, która powoduje, że Room przepisuje projekcję „*” w zapytaniu, tak aby nieużywane kolumny w wyniku zostały usunięte.
  • Opcja procesora room.expandProjection została wycofana. Użyj @RewriteQueriesToDropUnusedColumns zamiast zapytań zoptymalizowanych pod kątem sali z projekcją gwiazd. Pamiętaj, że @RewriteQueriesToDropUnusedColumns nie zastępuje rozwiązania konfliktu kolumn room.expandProjection oferowanego w przypadku typów zwracanych, które zawierają pola @Embedded.

Poprawki błędów

  • Naprawienie błędu polegającego na tym, że Room nie wykrywał prawidłowo wersji JDK używanej do włączenia procesora adnotacji przyrostowej. Dzięki Blaz Solar (me@blaz.solar) (b/155215201)
  • Room teraz umieszcza zależność ANTLR w procesorze adnotacji, aby uniknąć konfliktów wersji z innymi procesorami, które również używają ANTLR. (b/150106190)

Wersja 2.2.6

Wersja 2.2.6

16 grudnia 2020 roku

androidx.room:room-*:2.2.6 został zwolniony. Wersja 2.2.6 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że Room nieprawidłowo wyłączał stopniowe przetwarzanie adnotacji w nowszych wersjach JDK. (b/171387388)

Wersja 2.2.5

Wersja 2.2.5

18 marca 2020 r.

androidx.room:room-*:2.2.5 został zwolniony. Wersja 2.2.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Ustaw MultiInstanceInvalidationService jako directBootAware. Dziękujemy użytkownikowi „Mygod” (contact-git@mygod.be) za zgłoszenie błędu (b/148240967).
  • Naprawiliśmy błąd, który powodował awarię, gdy włączona była anulacja wielu instancji, a baza danych zawierała większą liczbę encji FTS. (b/148969394)
  • Rozwiązano problem z wczytywaniem bibliotek natywnych SQLite w procesorze adnotacji Room, który powodował awarię kompilatora z powodu równoległej kompilacji. (b/146217083)

Wersja 2.2.4

Wersja 2.2.4

19 lutego 2020 r.

androidx.room:room-common:2.2.4, androidx.room:room-compiler:2.2.4, androidx.room:room-guava:2.2.4, androidx.room:room-ktx:2.2.4, androidx.room:room-migration:2.2.4, androidx.room:room-runtime:2.2.4, androidx.room:room-rxjava2:2.2.4androidx.room:room-testing:2.2.4 są zwolnione. Wersja 2.2.4 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem z zawieszaniem transakcji, które powodowało utknięcie, jeśli coroutine została anulowana zbyt szybko, zanim transakcja się rozpoczęła. (b/148181325)
  • Rozwiązaliśmy problem z nieprawidłowym używaniem adnotacji @Generated podczas kompilowania za pomocą JDK 9. (b/146538330)
  • Rozwiązaliśmy problem, który powodował, że Room generował nieprawidłowy kod, gdy interfejs DAO w Kotlinie miał konkretną funkcję. (b/146825845)

Wersja 2.2.3

Wersja 2.2.3

18 grudnia 2019 r.

androidx.room:room-*:2.2.3 został zwolniony. Wersja 2.2.3 zawiera te commity

Poprawki błędów

  • Rozwiązaliśmy błąd, który powodował, że Room nie sprawdzał poprawności bazy danych, która nie przeszła migracji i zawierała stary hasz z indektami w swoim schemacie. (b/139306173)

Wersja 2.2.2

Wersja 2.2.2

20 listopada 2019 r.

androidx.room:room-*:2.2.2 został zwolniony. Wersja 2.2.2 zawiera te zatwierdzenia

Poprawki błędów

  • Naprawiliśmy błąd, który powodował, że zbieranie relacji jeden-do-jednego z ponad 999 wierszami powodowało zwracanie przez Room pustych elementów powiązanych. (b/143105450)

Wersja 2.2.1

Wersja 2.2.1

23 października 2019 r.

androidx.room:room-*:2.2.1 został zwolniony. Wersja 2.2.1 zawiera te zatwierdzenia:

Poprawki błędów

  • Naprawiliśmy błąd, który powodował, że Room nieprawidłowo ostrzegało o CURSOR_MISMATCH przy włączonej opcji kompilatora expandProjection. (b/140759491)
  • Dodaliśmy mechanizm ponownych prób obsługi brakującej natywnej biblioteki używanej do weryfikowania zapytań w czasie kompilacji.

Wersja 2.2.0

Wersja 2.2.0

9 października 2019 r.

androidx.room:room-*:2.2.0 został zwolniony. Wersja 2.2.0 zawiera te zatwierdzenia:

Ważne zmiany od wersji 2.1.0

  • Gotowa baza danych: w interfejsie RoomDatabase.Builder dostępne są 2 nowe interfejsy API do tworzenia pliku RoomDatabase na podstawie już wypełnionego pliku bazy danych. Wartość createFromAsset() oznacza, że wstępnie wypełniony plik bazy danych znajduje się w folderze zasobów pliku APK, a wartość createFromFile() – że plik znajduje się w dowolnym miejscu. Zastosowanie tych interfejsów API zmienia działanie migracji niszczycielskich, tak aby podczas migracji zapasowej Room próbował ponownie skopiować wstępnie wypełnioną bazę danych (jeśli jest dostępna), a w przeciwnym razie po prostu usuwał i ponownie tworzył wszystkie tabele. b/62185732
  • Wartości domyślne schematu: element @ColumnInfo ma teraz nową właściwość defaultValue, której można używać do określania wartości domyślnej kolumny. Wartości domyślne są częścią schematu bazy danych i zostaną zweryfikowane podczas migracji, jeśli zostaną określone. b/64088772
  • Relacje wiele-wiele: element @Relation ma teraz nową właściwość associateBy, która przyjmuje nową adnotację @Junction służącą do deklarowania relacji, która musi być spełniona za pomocą tabeli łączącej (z jeszcze innej nazwy tabeli złączenia). b/69201917
  • Relacje jeden-do-jednego: zniesiono ograniczenie dotyczące pól typu POJO z adnotacją @Relation, które muszą być typu List lub Set. Dzięki temu można reprezentować relacje jednowartościowe.b/62905145
  • Baza danych docelowych: adnotacje DAO @Insert, @Update@Delete mają teraz nową właściwość targetEntity, która umożliwia określenie tabeli docelowej, na której ma działać metoda DAO. Dzięki temu parametry tych metod DAO mogą być dowolnymi obiektami POJO, które będą interpretowane jako częściowe wystąpienia. W praktyce umożliwia to częściowe wstawianie, usuwanie i aktualizowanie. b/127549506
  • Procesy współbieżne: metody @Query DAO mogą teraz zwracać typ Flow<T>. Jeśli tabele obserwacyjne w zapytaniu zostaną unieważnione, zwrócony przepływ ponownie wyemituje nowy zestaw wartości. Zadeklarowanie funkcji DAO z typem zwracania Channel<T> jest błędem. Zamiast tego Room zaleca użycie funkcji Flow, a potem użycie funkcji sąsiednich, aby przekonwertować Flow na Channel. b/130428884
  • Procesor adnotacji Gradle Incremental: Room jest teraz procesorem adnotacji izolującym Gradle, a możliwość zwiększania można włączyć za pomocą opcji procesora room.incremental. Więcej informacji znajdziesz w sekcji Opcje kompilatora pokoju. Jeśli napotkasz jakieś problemy, zgłoś je tutaj. W przyszłej wersji stabilnej planujemy włączyć możliwość zwiększania liczby wersji domyślnie. b/112110217
  • Rozszerzanie projekcji: dodano nową eksperymentalną opcję kompilatora room.expandProjection, która powoduje, że Room przepisuje zapytanie z projekcją gwiazdki, aby zawierało tylko kolumny zwracane typu POJO. Na przykład w przypadku metody DAO o nazwie @Query("SELECT * FROM Song"), która zwraca obiekt POJO o nazwie SongIdAndTitle z tylko 2 polami. Następnie Room przekształci zapytanie na SELECT id, title FROM Song, aby pobrać minimalny zestaw kolumn, który spełnia wymagania typu zwracanych danych. Dzięki temu w zasadzie nie będzie wyświetlać się ostrzeżenieCURSOR_MISMATCH, które pojawia się, gdy zapytanie zwraca dodatkowe kolumny, które nie pasują do żadnego pola zwracanego typu POJO.

Wersja 2.2.0-rc01

5 września 2019 r.

androidx.room:room:2.2.0-rc01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Od wersji 2.2.0-beta01 nie wprowadzono żadnych publicznych zmian.

Wersja 2.2.0-beta01

22 sierpnia 2019 r.

androidx.room:room-*:2.2.0-beta01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Rozwiązaliśmy błąd, który powodował, że po pewnym czasie zapytanie strumienia wydzielonego przestawało emitować nowe wartości. (b/139175786)
  • Naprawiliśmy błąd, przez który Room nie akceptował starszego kodu szyfrowania schematu podczas otwierania bazy danych, która nie została przeniesiona od wersji Room 1.0. Powodowało to awarię podczas działania z powodu nieprawidłowego schematu. (b/139306173)

Wersja 2.2.0-alpha02

7 sierpnia 2019 r.

androidx.room:room-*:2.2.0-alpha02 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Procesy współbieżne: metody @Query DAO mogą teraz zwracać typ Flow<T>. Jeśli tabele obserwacyjne w zapytaniu zostaną unieważnione, zwrócony przepływ ponownie wyemituje nowy zestaw wartości. Zadeklarowanie funkcji DAO z typem zwracania Channel<T> jest błędem. Zamiast tego Room zaleca użycie funkcji Flow, a potem użycie funkcji sąsiednich, aby przekonwertować Flow na Channel. b/130428884
  • Rozszerzanie projekcji: dodano nową eksperymentalną opcję kompilatora room.expandProjection, która powoduje, że Room przepisuje zapytanie z projekcją gwiazdki, aby zawierało tylko kolumny zwracane typu POJO. Na przykład w przypadku metody DAO o nazwie @Query("SELECT * FROM Song"), która zwraca obiekt POJO o nazwie SongIdAndTitle z tylko 2 polami. Następnie Room przekształci zapytanie na SELECT id, title FROM Song, aby pobrać minimalny zestaw kolumn, który spełnia wymagania typu zwracanych danych. Dzięki temu w zasadzie nie będzie wyświetlać się ostrzeżenieCURSOR_MISMATCH, które pojawia się, gdy zapytanie zwraca dodatkowe kolumny, które nie pasują do żadnego pola zwracanego typu POJO.
  • onDestructiveMigrate to nowy interfejs wywołania zwrotnego dodany do RoomDatabase.Callback na wypadek, gdy Room musi przeprowadzić migrację bazy danych z utratą danych. b/79962330

Poprawki błędów

  • Naprawiliśmy błąd, który powodował, że Room generował nieprawidłowy kod, używając metody jako settera pola, gdy pole jest chronione. b/136194628
  • Naprawiono błąd, który powodował, że InvalidationTracker wywoływał NPE w drugim procesie, gdy włączono anulowanie wielu instancji i usługa anulowania została zakończona. b/137454915
  • Naprawienie błędu polegającego na tym, że Room nieprawidłowo rozpoznawał typ zwracany przez dziedziczoną funkcję zawieszania opatrzoną adnotacją @RawQuery. b/137878827
  • Zaktualizowano wygenerowany kod dla @Relation, gdy klucz powiązany jest typu BLOB, aby używać ByteBuffer, który jest porównywalny. b/137881998
  • Naprawiliśmy błąd, który powodował, że Room zgłasza brak setterów w obiektowych typach danych używanych jako parametry częściowych jednostek @Insert, @Update@Delete. b/138664463
  • Naprawiliśmy błąd, który powodował, że Room zgłasza brakujące metody getter i setter dla kolumny pomijanej za pomocą @Entity, gdy klasa encji była używana w niektórych metodach DAO. b/138238182
  • Naprawiliśmy błąd, który powodował, że Room nieprawidłowo konwertował nazwane argumenty wiązania na argumenty pozycyjne, co powodowało wyjątek czasu wykonywania podczas wykonywania zapytania z wykorzystywanymi ponownie parametrami. b/137254857

Wersja 2.2.0-alpha01

10 lipca 2019 r.

Nowe funkcje

  • Gotowa baza danych: w interfejsie RoomDatabase.Builder dostępne są 2 nowe interfejsy API do tworzenia pliku RoomDatabase na podstawie już wypełnionego pliku bazy danych. Wartość createFromAsset() oznacza, że wstępnie wypełniony plik bazy danych znajduje się w folderze zasobów pliku APK, a wartość createFromFile() – że plik znajduje się w dowolnym miejscu. Zastosowanie tych interfejsów API zmienia działanie migracji niszczycielskich, tak aby podczas migracji zapasowej Room próbował ponownie skopiować wstępnie wypełnioną bazę danych (jeśli jest dostępna), a w przeciwnym razie po prostu usuwał i ponownie tworzył wszystkie tabele. b/62185732
  • Wartości domyślne schematu: element @ColumnInfo ma teraz nową właściwość defaultValue, której można używać do określania wartości domyślnej kolumny. Wartości domyślne są częścią schematu bazy danych i zostaną zweryfikowane podczas migracji, jeśli zostaną określone. b/64088772

    Uwaga: jeśli schemat bazy danych zawiera już wartości domyślne, np. dodane za pomocą funkcji ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z, i zdecydujesz się zdefiniować wartości domyślne za pomocą funkcji @ColumnInfo w tych samych kolumnach, konieczne może być przeprowadzenie migracji w celu zweryfikowania nieuwzględnionych wartości domyślnych. Więcej informacji znajdziesz w artykule Migrating Rooms.

  • Relacje wiele-wiele: element @Relation ma teraz nową właściwość associateBy, która przyjmuje nową adnotację @Junction służącą do deklarowania relacji, która musi być spełniona za pomocą tabeli łączącej (z jeszcze innej nazwy tabeli złączenia). b/69201917
  • Relacje jeden-do-jednego: zniesiono ograniczenie dotyczące pól typu POJO z adnotacją @Relation, które muszą być typu List lub Set. Dzięki temu można reprezentować relacje jednowartościowe.b/62905145
  • Baza danych docelowych: adnotacje DAO @Insert, @Update@Delete mają teraz nową właściwość targetEntity, która umożliwia określenie tabeli docelowej, na której ma działać metoda DAO. Dzięki temu parametry tych metod DAO mogą być dowolnymi obiektami POJO, które będą interpretowane jako częściowe wystąpienia. W praktyce umożliwia to częściowe wstawianie, usuwanie i aktualizowanie. b/127549506
  • Procesor adnotacji Gradle Incremental: Room jest teraz procesorem adnotacji izolującym Gradle, a możliwość zwiększania można włączyć za pomocą opcji procesora room.incremental. Więcej informacji znajdziesz w sekcji Opcje kompilatora pokoju. Jeśli napotkasz jakieś problemy, zgłoś je tutaj. W przyszłej wersji stabilnej planujemy włączyć możliwość zwiększania liczby wersji domyślnie. b/112110217

Poprawki błędów

  • Room nie będzie już przekazywać EmptySetResultException do globalnego modułu obsługi błędów, gdy strumień Rx zapytania zostanie usunięty przed jego zakończeniem. b/130257475
  • Naprawiono błąd, który powodował, że Room wyświetlał nieprawidłowy komunikat o błędzie, gdy funkcja zawieszenia DAO oznaczona adnotacją @RawQuery nie miała typu zwracanego. b/134303897
  • Room nie będzie już generować adapterów DAO z typami nieprzetworzonymi. b/135747255

Wersja 2.1.0

Wersja 2.1.0

13 czerwca 2019 r.

Wersja 2.1.0 została wydana bez zmian w stosunku do wersji 2.1.0-rc01. Zmiany zawarte w tej wersji znajdziesz tutaj.

Ważne zmiany od wersji 2.0.0

  • FTS: Room obsługuje teraz elementy z tabeli mapowania FTS3 lub FTS4. Zajęcia oznaczone etykietą @Entity mogą być teraz dodatkowo oznaczone etykietą @Fts3 lub @Fts4, aby zadeklarować zajęcia z mapowaniem tabeli wyszukiwania pełnego tekstu. Opcje FTS do dalszej personalizacji są dostępne za pomocą metod adnotacji.
  • Widok: Room obsługuje teraz deklarowanie klasy jako zapisane zapytania, zwanego też widokiem, za pomocą adnotacji @DatabaseView.
  • Couroutines: metody DAO mogą teraz zawieszać funkcje. Aby korzystać z tej funkcji, dodaj room-ktx do zależności. Element ktx zawiera też funkcję rozszerzenia RoomDatabase.withTransaction do wykonywania transakcji bazy danych w ramach współbieżnej funkcji.
  • Auto Value: Room obsługuje teraz deklarowanie klas z adnotacją AutoValue jako obiektów i obiektów POJO. Adnotacje Room @PrimaryKey, @ColumnInfo, @Embedded i @Relation można teraz zadeklarować w abstrakcyjnych metodach klasy z adnotacją autovalue. Pamiętaj, że aby Room mogła je poprawnie zinterpretować, musisz też dodać adnotację @CopyAnnotations.
  • Dodatkowe wsparcie asynchroniczne: metody DAO opatrzone adnotacjami @Insert, @Delete lub @Update, a także bloki kodu @Query zawierające instrukcje INSERT, DELETE lub UPDATE, obsługują teraz typy zwracane Rx Completable, Single, Maybe i typ zwracany przez Guavę ListenableFuture. Mogą one też być funkcjami zawieszania.
  • enableMultiInstanceInvalidation to nowy interfejs API w RoomDatabase.Builder, który umożliwia unieważnienie wielu wystąpień RoomDatabase przy użyciu tego samego pliku bazy danych.
  • fallbackToDestructiveMigrationOnDowngrade to nowy interfejs API w RoomDatabase.Builder, który automatycznie ponownie tworzy bazę danych, jeśli nastąpi obniżenie wersji.
  • ignoredColumns to nowy interfejs API w adnotacji @Entity, który umożliwia wyświetlanie ignorowanych pól według nazwy.
  • Klasa Room będzie teraz prawidłowo używać głównego konstruktora Kotlina w klasach danych, co pozwoli uniknąć konieczności deklarowania właściwości jako vars.

Wersja 2.1.0-rc01

29 maja 2019 r.

Poprawki błędów

  • Rozwiązaliśmy błąd inicjalizowania pokoju, który mógł wystąpić z powodu już skonfigurowanej konfiguracji temp_store. b/132602198
  • Naprawiono ostrzeżenie dotyczące użycia cudzysłowów dla użytkowników korzystających z SQLite w wersji 3.27.0 lub nowszej.b/131712640
  • Naprawiono błąd, który powodował awarię InvalidationTrackera podczas równoległego przeprowadzania wielu weryfikacji nieważności. b/133457594

Wersja 2.1.0-beta01

7 maja 2019 r.

androidx.room 2.1.0-beta01 została wydana bez zmian w wersji 2.1.0-alpha07. Zmiany zawarte w tej wersji znajdziesz tutaj.

Wersja 2.1.0-alpha07

25 kwietnia 2019 r.

Zmiany w interfejsie API i zachowaniu

  • Funkcja rozszerzenia RoomDatabase.withTransaction została zmieniona tak, aby nie przyjmować bloku funkcji z parametrem CoroutineScope. Zapobiega to pomijaniu dodatkowego elementu coroutineScope { }, który jest wymagany do jednoczesnego wykonywania operacji w bloku transakcji.

Poprawki błędów

  • Usunięto błąd, który powodował, że Room nie mógł dopasować typu TypeConverter do funkcji DAO w Kotlinie zawierającej parametr typu Collection.b/122066791

Wersja 2.1.0-alpha06

22 marca 2019 r.

Zmiany w interfejsie API i zachowaniu

  • Zapytania dotyczące transakcji asynchronicznych są teraz serializowane, dzięki czemu Room nie będzie używać więcej niż 1 wątku do wykonywania transakcji bazy danych. Dodano RoomDatabase.Builder.setTransactionExecutor(Executor), aby umożliwić konfigurowanie wykonawcy na potrzeby transakcji.
  • RoomDatabase.runInTransaction(Callable) nie będzie już otaczać wyjątków zweryfikowanych w RuntimeExceptions. b/128623748

Poprawki błędów

  • Usunięto błąd, który powodował, że licznik nieważności przestawał obserwować tabelę treści, jeśli dodano obserwatorów zarówno dla tabeli treści, jak i zewnętrznej tabeli FTS treści. b/128508917
  • Zaktualizowano gramatykę SQLite w Room, aby odpowiadała wersji SQLite 3.24.0. b/110883668

Wersja 2.1.0-alpha05

13 marca 2019 r.

Nowe funkcje

  • Funkcja rozszerzenia RoomDatabase.withTransaction umożliwia bezpieczne przeprowadzanie transakcji bazy danych w ramach współbieżnej funkcji. Funkcje rozszerzeń pokoju wraz z obsługą coroutines są dostępne w artefakcie room-ktx.
  • Nieabstrakcyjne metody DAO otagowane jako @Transaction mogą teraz zawieszać funkcje. b/120241587

Zmiany w interfejsie API i zachowaniu

  • Artefakt room-coroutines został przemianowany na room-ktx, aby zachować spójność z nazwami innych artefaktów androidx.
  • Funkcje beginTransaction, setTransactionSuccessfulendTransaction w funkcji RoomDatabase zostały wycofane na rzecz funkcji runInTransaction i funkcji rozszerzenia room-ktx withTransaction.

Poprawki błędów

  • Rozwiązaliśmy błąd, który powodował pomijanie argumentów tokenizera, jeśli używany był tokenizer SIMPLE. b/125427014
  • Naprawiono błąd polegający na tym, że Room nieprawidłowo rozpoznawał zawieszone funkcje z parametrami, których typ był klasą wewnętrzną. b/123767877
  • Rozwiązano błąd polegający na tym, że opóźniona metoda @Query DAO z instrukcjami INSERT, UPDATE lub DELETE nadmiernie przygotowywała zapytanie w głównym wątku. b/123695593
  • Naprawiono różne błędy, w których Room generował nieprawidłowy kod dla niektórych funkcji zawieszania. b/123466702b/123457323
  • Naprawiono błąd, który powodował, że wycofane metody nie były prawidłowo pomijane w generowanym kodzie. b/117602586
  • Zaktualizowano zależność Room od androidx.sqlite do wersji 1.0.2, która zawiera poprawki umożliwiające prawidłowe działanie uszkodzonych baz danych. b/124476912

Znane problemy

  • Room 2.1.0-alpha05 zależy od artefaktu kotlinx-metadata-jvm, który nie jest obecnie dostępny w Maven Central (KT-27991). Ten zależność można rozwiązać, dodając maven { url "https://kotlin.bintray.com/kotlinx/" } do repozytoriów projektu.

Wersja 2.1.0-alpha04

25 stycznia 2019 r.

Nowe funkcje

  • Metody DAO opatrzone adnotacjami @Query, które zawierają instrukcje INSERT, UPDATE lub DELETE, mogą teraz zwracać asynchroniczne typy Single, Mayble, CompletableListenableFuture. Dodatkowo można też zawiesić funkcje. b/120227284

Zmiany w interfejsie API i zachowaniu

  • Room zwróci teraz błąd, jeśli nieabstrakcyjna metoda DAO oznaczona adnotacją @Transaction zwróci typ asynchroniczny, taki jak Single, Mayble, Completable, LiveData lub ListenableFuture. Transakcje są ograniczone do wątku, więc obecnie Room nie może rozpocząć ani zakończyć transakcji dotyczącej funkcji, która może wykonywać zapytania w różnych wątkach. b/120109336
  • Funkcje OnConflictStrategy.FAILOnConflictStrategy.ROLLBACK zostały @Deprecated, ponieważ nie działają zgodnie z oczekiwaniami w ramach obecnych powiązań SQLite w Androidzie. b/117266738

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że Room nie używał prawidłowo typu zwracanego TypeConverter, jeśli metoda DAO była funkcją zawieszania. b/122988159
  • Usunęliśmy błąd, który powodował, że Room nieprawidłowo rozpoznawał dziedziczone funkcje zawieszania jako niewymagające zawieszania. b/122902595
  • Naprawiliśmy błąd, który powodował, że Room generował nieprawidłowy kod, gdy pole @Embedded znajdowało się w klasie nadrzędnej i było używane w wielu klasach podrzędnych. b/121099048
  • Rozwiązaliśmy problem, który powodował blokadę bazy danych podczas wywoływania funkcji zawieszania DAO między beginTransaction()endTransaction(). b/120854786

Wersja 2.1.0-alpha03

4 grudnia 2018 r.

Zmiany w interfejsie API

  • Parametr FTS tokenizer w funkcjach @Fts3/@Fts4 przyjmuje teraz typ String zamiast typu Enum. Dzięki temu Room może używać niestandardowych tokenizerów. Wbudowane dzielniki są nadal definiowane w FtsOptions jako stałe ciągi znaków. b/119234881

Nowe funkcje

  • Couroutines: metody DAO mogą teraz zawieszać funkcje. Aby obsługiwać funkcje zawieszania w pokoju, udostępniliśmy nowy element room-coroutines. b/69474692
  • Metody DAO opatrzone adnotacjami @Insert, @Delete lub @Update obsługują teraz typ zwracanych danych ListenableFuture. b/119418331

Poprawki błędów

  • Naprawiono błąd polegający na tym, że Room nieprawidłowo próbował znaleźć konstruktor z kolumnami w właściwości ignoredColumns obiektu @Entity. b/119830714
  • Naprawiono błąd, który powodował, że Room nie oznaczała parametrów metody DAO jako finalnych w wygenerowanej implementacji. b/118015483
  • Naprawiliśmy błąd powodujący awarię procesora Room podczas raportowania błędu w zapytaniu zawierającym symbole specjalne. b/119520136
  • Naprawiono błąd, który powodował, że Room odrzucał inne implementacje funkcji Collection jako argumenty wyrażenia IN. b/119884035
  • Naprawiliśmy błąd, który powodował, że dane zwracane przez LiveData z Room były zbierane bez końca, co powodowało, że nie były już emitowane nowe dane. b/74477406
  • Zaktualizowano funkcję zamykania RoomDatabase, aby zmniejszyć konflikty blokady. b/117900450

Wersja 2.1.0-alpha02

30 października 2018 r.

Nowe funkcje

  • Dodaliśmy obsługę odwołań do elementu @DatabaseView w elementach @Relation. b/117680932

Poprawki błędów

  • Naprawiliśmy błąd, który powodował, że Room wykonywał operacje wejścia/wyjścia na dysku w wątku głównym podczas subskrybowania i usuwania z typu zwracanego Rx. b/117201279
  • Rozwiązaliśmy błąd polegający na tym, że Room nie mógł znaleźć odpowiedniego konwertera typu dla pola w klasie obiektu Kotlina. b/111404868
  • Naprawiliśmy błąd, który powodował, że Room generował nieprawidłowy kod dla implementacji interfejsu DAO zawierającej metodę domyślną w Kotlinie, która nie ma argumentów. b/117527454
  • Zaktualizowano parsowanie gramatyki SQLite w Room, aby rozwiązać problem z wydajnością, który powodował długi czas kompilacji. b/117401230

Wersja 2.1.0-alpha01

8 października 2018 r.

Nowe funkcje

  • FTS: pokój obsługuje teraz elementy z tabeli mapowania FTS3 lub FTS4. Zajęcia oznaczone etykietą @Entity mogą być teraz dodatkowo oznaczone etykietą @Fts3 lub @Fts4, aby zadeklarować zajęcia z mapowaniem tabeli wyszukiwania pełnego tekstu. Opcje FTS umożliwiające dalsze dostosowywanie są dostępne za pomocą metod adnotacji. b/62356416
  • Widok: Room obsługuje teraz deklarowanie klasy jako zapisanego zapytania, zwanego też widokiem, za pomocą adnotacji @DatabaseView. b/67033276
  • Wartość automatyczna: Room obsługuje teraz deklarowanie klas z adnotacjami AutoValue jako obiektów i obiektów POJO. Adnotacje Room @PrimaryKey, @ColumnInfo, @Embedded@Relation można teraz deklarować w metodach abstrakcyjnych klasy z adnotacją wartości automatycznej. Pamiętaj, że aby Room mogła je poprawnie zinterpretować, adnotacje muszą być też opatrzone parametrem @CopyAnnotations. b/62408420
  • Obsługa dodatkowych typów zwrotów leków na receptę: metody DAO opatrzone adnotacjami @Insert, @Delete lub @Update obsługują teraz typy zwrotów leków na receptę Completable, Single<T> i Maybe<T>. b/63317956
  • Typy niezmienne z @Relation: w poprzedniej wersji wymagane było, aby pola o adnotacji @Relation były ustawialne, ale teraz mogą być one parametrami konstruktora.
  • enableMultiInstanceInvalidation: to nowy interfejs API w wersji RoomDatabase.Builder, który umożliwia unieważnienie wielu instancji RoomDatabase przy użyciu tego samego pliku bazy danych. Ten mechanizm unieważniania wielu instancji działa również w przypadku wielu procesów. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: nowy interfejs API w RoomDatabase.Builder, który automatycznie ponownie tworzy bazę danych, jeśli nastąpi obniżenie wersji. b/110416954
  • ignoredColumns: to nowy interfejs API w annotacji @Entity, którego można używać do wyświetlania ignorowanych pól według nazwy. Przydatne do ignorowania dziedziczonych pól w podmiocie. b/63522075

Zmiany w interfejsie API i zachowaniu

  • Sale mCallbackmDatabaseRoomDatabase są teraz @Deprecated i zostaną usunięte w następnej głównej wersji pokoju. b/76109329

Poprawki błędów

  • Rozwiązaliśmy 2 problemy, które powodowały, że Room nie był w odpowiednim stopniu przywracany po uszkodzeniu bazy danych lub nieprawidłowej migracji podczas inicjalizacji. b/111504749b/111519144
  • Room będzie teraz prawidłowo używać głównego konstruktora Kotlina w klasach danych, dzięki czemu nie trzeba będzie deklarować pól jako vars. b/105769985

Wersja 2.0.0

Wersja 2.0.0

1 października 2018 r.

androidx.room 2.0.0 jest wydana bez zmian w wersji 2.0.0-rc01.

Wersja 2.0.0-rc01

20 września 2018 r.

androidx.room 2.0.0-rc01 jest wydana bez zmian w stosunku do wersji 2.0.0-beta01.

Wersja 2.0.0-beta01

2 lipca 2018 r.

Zmiany w interfejsie API i zachowaniu

  • Dodano RoomDatabase.Builder.setQueryExecutor(), aby umożliwić dostosowywanie miejsca wykonywania zapytań
  • Dodano obsługę RxJava2 Observable
  • Wygenerowane implementacje DAO i bazy danych są teraz ostateczne

Poprawki błędów

  • Określanie nazwy klasy/pola w przypadku błędu „Nie można znaleźć metody getter dla pola” b/73334503
  • Naprawiono zgodność wsteczną RoomOpenHelper ze starszymi wersjami Room b/110197391

Zależności sprzed AndroidX

W przypadku wersji Room starszych niż AndroidX uwzględnij te zależności:

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "android.arch.persistence.room:guava:$room_version"

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

Wersja 1.1.1

Wersja 1.1.1

19 czerwca 2018 r.

Sala 1.1.1 jest identyczna z salą 1.1.1-rc1.

Wersja 1.1.1-rc1

16 maja 2018 r. Jeśli korzystasz z migracji, zdecydowanie zalecamy użycie pokoju 1.1.1-rc1 zamiast 1.1.0.

Naprawiono błąd, który powodował, że Room nie inicjował prawidłowo po migracji b/79362399

Wersja 1.1.0

Wersja 1.1.0-beta3

19 kwietnia 2018 r.

Poprawki błędów

  • Naprawiono błąd kompilacji, który występował, gdy obiekt POJO w języku Kotlin odwoływał się do elementu relacji zdefiniowanego w języku Java b/78199923

Wersja 1.1.0-beta2

5 kwietnia 2018 r.

Poprawki błędów

  • Usunięto krytyczny błąd w implementacjach Room SingleMaybe, w których zapytania były odzyskiwane z zapasu z wyprzedzeniem, co powodowało problemy, gdy do zwracanych instancji Single lub Maybe dodawano więcej niż 1 obserwatora. b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] nie VACUUM bazy danych, jeśli jest wywoływana w ramach transakcji. b/77235565

Wersja 1.1.0-beta1

21 marca 2018 r.

Zmiany w interfejsie API

  • Na podstawie opinii z weryfikacji interfejsu API interfejs @RawQuery nie akceptuje już przekazywania parametru zapytania String. Musisz użyć [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (aby łatwo utworzyć instancję [SupportSQLiteQuery][ref-SupportSQLiteQuery] z obsługą argumentów, zobacz [SimpleSQLiteQuery][ref-SimpleSQLiteQuery]).
  • Metoda [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] w klasie RoomDatabase.Builder teraz akceptuje wartość vararg int zamiast vararg Integer.

Poprawki błędów

  • Funkcja [RoomDatabase.clearAllTables][ref-clearAllTables] próbuje teraz zwrócić przestrzeń do systemu operacyjnego przez ustawienie punktu kontrolnego WAL i VACUUM bazy danych.
  • [@RawQuery][ref-RawQuery] teraz akceptuje dowolne obiekty Pojo dla właściwości observedEntities, o ile tylko obiekty te odwołują się do co najmniej 1 elementu za pomocą pól Embedded lub Relation.b/74041772
  • Strony: implementacja DataSource w Room obsługuje teraz poprawnie zależności między wieloma tabelami (np. relacje i złączenia). Wcześniej nie powodowały one generowania nowych wyników lub nie mogły zostać skompilowane. b/74128314

Wersja 1.1.0-alpha1

22 stycznia 2018 r.

Nowe funkcje

  • RawQuery: ten nowy interfejs API umożliwia metodom @Dao otrzymywanie zapytania SQL jako parametru zapytania.b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: ten nowy interfejs API w RoomDatabase.Builder umożliwia bardziej szczegółowe określenie wersji początkowych schematów, od których można przeprowadzać niszczące migracje (w porównaniu z fallbackToDestructiveMigration)b/64989640
  • Pokój obsługuje teraz tylko nowsze interfejsy API (alpha-4 i nowsze), a nieaktualne interfejsy API LivePagedListProvider zostały wycofane. Aby korzystać z nowej wersji alfa aplikacji Room, musisz użyć stronyowania w wersji alpha-4 lub nowszej i przełączyć się z wersji LivePagedListProvider na LivePagedListBuilder, jeśli jeszcze tego nie zrobisz.

Poprawki błędów

  • Ulepszona obsługa typów Kotlin Kapt. b/69164099
  • Kolejność pól nie powoduje już unieważnienia schematu. b/64290754