Room
Ostatnia aktualizacja | Wersja stabilna | Wersja kandydująca | Wersja Beta | Wersja alfa |
---|---|---|---|---|
30 października 2024 r. | 2.6.1 | - | - | 2.7.0-alfa11 |
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.
Zależności dotyczące sal obejmują migracje sal i pokoje 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 Szybkie rozpoczęcie pracy z 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
W pokoju dostępne są poniższe opcje procesora adnotacji.
room.schemaLocation |
directory
Włącza 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 adnotacji przyrostowych Gradle. Wartością domyślną jest true .
|
room.generateKotlin |
boolean
Generuj pliki źródłowe Kotlin zamiast języka Java. Wymaga KSP. Wartością domyślną jest false .
Więcej informacji znajdziesz w uwagach do wersji 2.6.0.
|
Korzystanie z wtyczki Room Gradle
W wersji Room 2.6.0 i nowszych możesz użyć wtyczki Room Gradle, 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 sal oraz różnych zadań i jego backendów (javac, KAPT, KSP) do umieszczania plików schematu w folderach o różnych nazwach, np. schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Te pliki powinny zostać przesłane 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 |
- |
Użyj 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 w przypadku pokoju używany jest klucz KSP czy KAPT.
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 podstawowym, podczas dodawania tej opcji trzeba użyć elementu CommandLineArgumentsProvider
, aby Gradle znał ten katalog podczas przeprowadzania aktualnych testów.
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ą.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 2.7
Wersja 2.7.0-alfa11
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 otrzymujeRawRoomQuery
na potrzeby przekierowywania do pokoju. (Ie57b5, b/369136627)
Poprawki błędów
- Rozwiązaliśmy problem z przekierowywaniem w pokojach, w którym nieprawidłowy kod był generowany podczas używania
@Relation
w połączeniu zPagingSource
.
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 zByteBuffer
na platformach innych niż Android i JVM. (I75543, b/367205685) - Dodaj funkcję
SQLiteStatement.getColumnType()
oraz różne stałe wynikówSQLITE_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łasnyInvalidationTracker.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.
Usługa androidx.room:room-*:2.7.0-alpha07
została zwolniona. Wersja 2.7.0-alfa07 zawiera te zatwierdzenia.
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 wygenerowanym parametrem „actual” funkcji
RoomDatabaseConstructor
, w którym w funkcjiinitialize
brakuje modyfikatora „actual”, jeśli taka funkcja jest 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 interfejsu API
- Zmień konfigurację instancjonowania
RoomDatabase
w projekcie KMP.
Ze względu na model kompilacji Kotlin 2.0 strategia odwoływania się do funkcji o nazwie instantiateImpl()
do wygenerowania jest bardziej uzasadniona. Wprowadzono 2 nowe interfejsy API: @ConstructedBy
i RoomDatabaseConstructor
, które zastępują strategię instantiateImpl()
. Nowa strategia:
Określ obiekt expect, który implementuje interfejs
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
Połącz obiekt z deklaracją
@Database
za pomocą@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
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 nazwieRoomRawQuery
, który jest podobny do funkcjiSupportSQLiteQuery
pod względem przechowywania w surowym ciągu znaków SQL i funkcji służącej do wiązania argumentów w wyrażeniu. Funkcje z adnotacjami funkcji@RawQuery
mogą teraz akceptowaćRoomRawQuery
jako pojedynczy parametr. (IEA844, b/330586815) - Dodaj przeciążenie typu
setQueryCallback()
, które akceptuje żądanieCoroutineContext
. (Id66ff, b/309996304) - Dodano obsługę
linuxArm64
celów Kotlin Multiplatform (I139d3, b/338268719)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że w przypadku elementów docelowych spoza Androida usługa Room nieprawidłowo generowała wywołanie
recursiveFetchArrayMap
. (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 pasowały do nowych obcych kluczy. (7672c0, b/352085724)
Wersja 2.7.0-alpha05
10 lipca 2024 r.
Usługa androidx.room:room-*:2.7.0-alpha05
została zwolniona. Wersja 2.7.0-alpha05 zawiera te komity.
Zmiany w interfejsie API
- Nazwa
SQLiteKt
została zmieniona naSQLite
, aBundledSQLiteKt
naBundledSQLite
. (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 przekroczenie limitu czasu połączenia podczas korzystania zAndroidSQLiteDriver
.
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 związany z procesorem adnotacji Room, który generował niezgodny kod KMP, gdy w DAO zdefiniowano typ zwracany mapy wielopoziomowej. (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-alfa03 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw różne problemy dotyczące Kotlin 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 związane z KSP.
Wersja 2.7.0-alpha01
1 maja 2024 r.
Usługa androidx.room:room-*:2.7.0-alpha01
została zwolniona. 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” (aby była dostępna 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 implementacjiRoomDatabase
. 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, żeRoomDatabase
można skonfigurować tylko za pomocą wykonawców używającychsetQueryExecutor
lub w kontekście coroutine, ale nie obu jednocześnie. - Dodano interfejs API do konfigurowania Room za pomocą sterownika
SQLite
:RoomDatabase.Builder.setDriver()
. Więcej informacji o interfejsie APISQLite
Driver znajdziesz w dokumentacji SQLite KMP. - Dodano interfejsy API umożliwiające dostęp do podstawowego interfejsu
SQLiteConnection
z interfejsów API sterownika:RoomDatabase.useReaderConnection
iRoomDatabase.useWriterConnection
. - Wywołania zwrotne związane z usługą Varios Room mają teraz przeciążoną wersję, która otrzymuje
SQLiteConnection
zamiastSupportSQLiteDatabase
. Te wartości 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. Te funkcje zwracają:Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- Artefakt KTX
androidx.room:room-ktx
został scalony z artefaktemandroidx.room:room-runtime
wraz ze wszystkimi jego interfejsami API. artefakt jest teraz pusty. Usuń je z listy zależności.
Wersja 2.6
Wersja 2.6.1
29 listopada 2023 r.
Usługa androidx.room:room-*:2.6.1
została zwolniona. Wersja 2.6.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązanie problemu w generowanym kodzie, w którym wartość domyślna kolumn podwójnych w
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 jakoLoadStateUpdate
zLoadResult.Error
zawierającym Throwable. Ten stan błędu można zaobserwować w sekcjachPagingDataAdapter.loadStateFlow(Views)
lubLazyPagingItems.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 getterów 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: podczas korzystania z narzędzia Kotlin CodeGen możesz zauważyć, że Twoje projekty są bardziej rygorystyczne pod względem dopuszczalności wartości null. W Kotlin CodeGen znaczenie argumentów typu null jest istotny, natomiast w Javie ta zasada jest najczęściej 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 wystąpi błąd. Aby tego uniknąć, musisz użyć parametru „Flow<foo?\>” przy założeniu, że emitowana jest wartość null. </foo?\></foo\>
- Do Room dodano nowy artefakt wtyczki Room Gradle 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 przez 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 zatwierdzenia.
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 wyjątku przypadku
SQLite
podczas działania typu upsert napotkanego, gdy wyjątek2067 SQLITE_CONSTRAINT_UNIQUE
został zgłoszony podczas operacji upsert. Komponent upsert powinien wykonać aktualizację. (If2849, b/243039555)
Wersja 2.6.0-alpha03
9 sierpnia 2023 r.
Usługa androidx.room:room-*:2.6.0-alpha03
została zwolniona. Wersja 2.6.0-alpha03 zawiera te commity.
Nowe funkcje
- Zagnieżdżone typy zwracania map w funkcjach DAO są teraz obsługiwane w pokojach. (I13f48, 203008711)
Zmiany interfejsu API
- Utworzono nowy typ adnotacji o nazwie
@MapColumn
, który zastąpił wycofany typ@MapInfo
. Dla każdej nazwy kolumny (keyColumnName
,valueColumnName
lub obu) dostępnej w adnotacji@MapInfo
musisz zadeklarować adnotację@MapColumn
przy użyciu samego parametrucolumnName
i użyć adnotacji w konkretnym argumencie typu, do którego się odwołujesz (klucz lub wartość mapy), w zwracanym typie 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 przyjmować lokalizację globalną dla wszystkich wariantów bez tworzenia wielu katalogów. Umożliwia to płynniejsze migracje, które jest na tyle elastyczne, że pozwala też ręcznie konfigurować rodzaje lub schematy typów kompilacji, zachowując jednocześnie zalety wtyczki (kompilacje powtarzalne i buforowane). (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 do obsługi Gradle do sal
Ta nowa wersja zawiera nowy artefakt wtyczki do obsługi pokoi o identyfikatorze androidx.room
, która rozwiązuje różne problemy występujące w Pokoju związane z obsługą danych wejściowych i wyjściowych schematów przy użyciu 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 umożliwienia odtwarzalności 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 oraz różne zadania kompilacji i 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
- Usługa
RoomDatabase.QueryCallback
została zdefiniowana jako funkcjonalny interfejs umożliwiający użycie 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 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 Pokoju na potrzeby 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. Kolejne ograniczenie, które zostało dodane, polega na tym, że w narzędziu Room for Kotlin CodeGen nie są już dozwolone typy zwracanych kolekcji, dla których wartości null są dozwolone.
Ostrzeżenie: podczas korzystania z Kotlin CodeGen Twoje projekty mogą być 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 wystąpi 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 generuje zmiany narzędzia do śledzenia unieważnień. 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 właściwości abstrakcyjne w postaci modułów pobierających DAO ani zapytań DAO w codegencie Kotlin. Należy je tylko przepisywać jako funkcje, aby uniknąć fałszywego przekonania, że wartość właściwości jest niezmienna i ma stały zapisany 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ł wyświetlanie błędu w Room podczas testowania w 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
- Unikaj sprawdzania 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 kontroli
isOpenInternal
. (E91fb35) - Ulepszono obsługę okna reentrant w funkcji
acquireTransactionThread()
w Rooms. (219f98b). Podczas zawieszania transakcji pokój używa wątku od wykonawcy transakcji, uruchamia w nim pętlę zdarzeń i wysyła do niej zawieszenie operacji na bazie danych, dzięki czemu wszystkie są objęte współpracą transakcji. Zwykle wątek transakcji różni się od tego, z którego została rozpoczęta transakcja, ale w niektórych przypadkach są takie same. Aby obsłużyć takie przypadki ponownego wywołania, funkcjawithTransaction()
została przebudowana, aby nie polegać już na zadaniu sterującym. Zamiast tego będzie ona wykonywać blok zawieszania transakcji z poziomurunBlocking
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.0
i androidx.room:room-paging-rxjava3:2.5.0
są dostępne. Wersja 2.5.0 zawiera te zatwierdzenia.
Wersja 2.5.0
11 stycznia 2023 r.
androidx.room:room-*:2.5.0
został zwolniony. Wersja 2.5.0 zawiera te zatwierdzenia.
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 znaną zmianą w przypadku niekompatybilnego źródła jest to, że w zasadzieInvalidationTracker
musisz zadeklarować parametronInvalidate()
w elemencieObserver
, aby mieć parametr typuSet
, a nieMutableSet
. 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 występują istotne niezgodności, zgłoś błąd. - Dodano nową adnotację skrótu
@Upsert
, która próbuje wstawić element, jeśli nie ma konfliktu z wyjątkowością, lub zaktualizować go, jeśli konflikt występuje. (I7aaab, b/241964353) - Do obsługi funkcji pagingu pokoi dodano nowe komponenty
room-paging-rxjava2
,room-paging-rxjava3
iroom-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
zamiastIllegalStateException
. (I328dd) - Popraw niezgodną zmianę źródła Kotlin w metodach pobierania / właściwości
getOpenHelper
,getQueryExecutor
igetTransactionExecutor
. (Iad0ac)
Wersja 2.5.0-alpha02
1 czerwca 2022 r.
androidx.room:room-*:2.5.0-alpha02
został zwolniony. Wersja 2.5.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano nowe elementy
room-paging
room-paging-rxjava2
,room-paging-rxjava3
iroom-paging-guava
, aby obsługiwać przekierowanie do pokoju.(41a1d4,b/203666906),(eb6098, b/203666906),(1b9ae4, b/203666906)
Zmiany w interfejsie API
- Cała platforma
room-runtime
została przekonwertowana z Javy 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 funkcjiObserver
, aby mieć parametr typuSet
, a nieMutableSet
. - Dodano interfejsy API do podawania nazw tabel kluczy i wartości na potrzeby ujednoznacznienia 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
- Zduplikowany algorytm heurystyczny do rozpoznawania 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.
Usługa androidx.room:room-*:2.5.0-alpha01
została zwolniona. 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
@Query
w metodach Getter właściwości. (I0a09b) - Przekonwertowano pokój-common z Javy na Kotlin. (I69c48, b/206858235)
Uwaga: mogą wystąpić problemy ze zgodnością źródła, ponieważ niektóre właściwości zostały przeniesione do obiektów towarzyszących podczas konwersji biblioteki na Kotlin. Jeśli kod został utworzony w Kotlin i wywołał starą wersję pokoju, nowa wersja będzie potrzebować sufiksu „.Companion” podczas uzyskiwania dostępu do tych usług.
- Konwersja funkcji room-migration z Java na Kotlin. (I2724b, b/206858622)
- Skonwertowano
paging
powiązane pliki w usłudzeroom-runtime
z Javy na Kotlin. (I82fc8, b/206859668) - Dodano interfejs API do blokowania i używania wieloprocesowych procesów na poziomie FrameworkSQLite*, aby chronić tworzenie i migracje baz danych w ramach pierwszej sesji obejmującej wiele procesów. (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 getter i setter 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 zatwierdzenia.
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ązaliśmy problem z generowaniem kodu funkcji zawieszania Dao
@Transaction
z treścią, która generuje domyślną metodę interfejsu w wyniku kompilacji z użyciem-Xjvm-default=all
lub równoważnego elementu. (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/ustawiających będzie używana nazwa źródłowa funkcji (wcześniej używano nazwy funkcji w JVM, która jest inna w przypadku funkcji/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 commity.
Ważne zmiany od wersji 2.3.0
- Automatyczne migracje: w pokoju jest teraz dostępny 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, żeAutoMigrationSpec
zostanie dostarczony w czasie działania za pomocąRoomDatabase.Builder#addAutoMigrationSpec()
. Dzięki temu platforma do wstrzykiwania zależności dostarcza takie specyfikacje, gdy potrzebują złożonych 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 podczasrunMigrationsAndValidate
. - Obsługa stron pokojowych w wersji 3.0: opublikowaliśmy wersję
androidx.room:room-paging
, która zapewnia natywną obsługę stronicowania w wersji 3.0 w przypadku zapytań o pokoje zwracających wartość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 toMap
,SparseArray
,LongSparseArray
, a także mapy Guavy:ImmutableMap
,ImmutableSetMultimap
iImmutableListMultimap
.
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 zatwierdzenia.
Nowe funkcje
- Dodaliśmy obsługę tablic rzadkich i tablic rzadkich długich w @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 tego 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)
- Naprawiliśmy błąd, 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. Po tych zmianach w przypadku mapowania 1-wiele zwracana dla klucza kolekcja zwrócona dla klucza nie będzie zawierała nieprawidłowego obiektu wartości, o ile 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 przezRoomDatabase.Builder
, dzięki czemu można ją zastąpić zamiastDispatchers.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
- Dodano wbudowany konwerter typu UUID. (I671e8, b/73132006)
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 artefakt, gdy używasz strony 3 z pokojem. (Ieaffe)
Poprawki błędów
- Rozwiązanie problemu polegającego na tym, że wyniki zapytań wielomapowych 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 toMap
orazImmutableMap
,ImmutableSetMultimap
iImmutableListMultimap
z Guavy.Oto przykłady zapytań multimapowych:
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 multimapowania może być również zawarty w obsługiwanych typach zwracanych asynchronicznych, takich jak
LiveData
,Observable
Rx czy współrzędneFlow
.
Wybieranie pokoju
Wersja
androidx.room:room-paging
została wydana, zapewniając obsługę natywnego Paging 3.0 dla zapytań Room zwracającychandroidx.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 w inny sposób, więc każdy klucz ręcznie dostarczony do strony PagingSource dla pokoju będzie musiał uwzględnić tę zmianę w działaniu, w tym klucz initialKey przekazywany za pomocą konstruktora Pager. Strony zaczną się wczytywać odKey
, a pierwszym wczytywanym elementem będzieKey
. Jest to inne zachowanie niż dotychczasowe, w którymLoadParams.Refresh.Key
traktowane jest jako pozycja przewijania przez użytkownika, a elementy są wczytywane zarówno przed, jak i po kluczu.Artefakt jest opcjonalny, a rezygnacja spowoduje przywrócenie dotychczasowej obsługi strony w wersji 3.0 wprowadzonej w pokoju 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
- Naprawiono błąd automatycznej migracji dotyczący obsługi naruszeń kluczy obcych. (B/190113935)
Wersja 2.4.0-alpha03
16 czerwca 2021 r.
Usługa androidx.room:room-*:2.4.0-alpha03
została zwolniona. 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 podczasrunMigrationsAndValidate
.
Poprawki błędów
Rozwiązaliśmy problem z natywną biblioteką SQLite w Pokoju, która obsługiwała układy 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 klucza KSP pokoju zależy teraz od klucza 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 służący do deklarowania, żeAutoMigrationSpec
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ąż problem z automatycznymi migracjami, który polegał na tym, że nie były prawidłowo odtwarzane
@DatabaseView
.
Darowizna zewnętrzna
- Rozwiąż problem w pokoju
JournalMode.TRUNCATE
, w którym wywołanie zwrotneInvalidationTracker
było czasami wywoływane nieprawidłowo, za późno lub w ogóle nie było możliwe. Dzięki firmieUli 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-alfa01 zawiera te zatwierdzenia.
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 wprowadzone 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 istnieje już konwerter typów dla wyliczenia, sala będzie używać go w pierwszej kolejności, a nie 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. Oddzwanianie można ustawić w
RoomDatabase.Builder#setQueryCallback()
. - Udoskonalenie gotowe do użycia: sala ma teraz interfejsy API do tworzenia bazy danych na podstawie gotowej bazy danych odczytywanej ze strumienia wejściowego. Umożliwia to m.in. skompresowanie bazy danych w ramach pakietu.
- Konwertowanie 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 udostępniony do pokoju, użyj nowej adnotacji @ProvidedTypeConverter.
- Obsługa RxJava3: Room obsługuje teraz typy RxJava3. Podobnie jak w przypadku RxJava2, możesz zadeklarować metody DAO, których typ zwracania to Flowable, Single, może i Competable. Dostępny jest też nowy artefakt
androidx.room:room-rxjava3
do obsługi RxJava3. - Obsługa wywołania 3.0: Room będzie teraz generować implementacje dla metod z adnotacjami
@Query
, których typ zwracania toandroidx.paging.PagingSource
.
Wersja 2.3.0-rc01
24 marca 2021 r.
Usługa androidx.room:room-*:2.3.0-rc01
została zwolniona. Wersja 2.3.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który uniemożliwiał wykorzystanie zapytań coroutine Flow 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
- Dodano obsługę kompilacji przyrostowej dla KSP. (I031c1, b/176453350)
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 to zamiennik KAPT, który pozwala na natywne uruchamianie procesorów adnotacji w kompilatorze Kotlin, co znacznie skraca czas kompilacji.
Aby używać pokoju z KSP, możesz zastosować wtyczkę do Gradle KSP i zastąpić konfigurację
kapt
w pliku kompilacji kodemksp
. Na przykład zamiastkapt 'androidx.room:room-compiler:2.3.0-beta02'
użyjksp 'androidx.room:room-compiler:2.3.0-beta02'
. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją KSP.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 żadne inne procesory nie używają KAPT. Znane problemy znajdziesz w problemie b/160322705.
Wersja 2.3.0-beta01
27 stycznia 2021 r.
Usługa androidx.room:room-*:2.3.0-beta01
została zwolniona. Wersja 2.3.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- Automatycznie zamykanie baz danych: Room może teraz zamykać bazy danych, do których nie ma dostępu po upływie określonego czasu. To jest funkcja eksperymentalna, którą można włączyć, wywołując metodę
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 API
RoomDatabase.QueryCallback
, który można wykorzystać do logowania w edycjach debugowania. Można go użyć, gdy zapytania mają zostać wykonane. Oddzwanianie można ustawić wRoomDatabase.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ć, zmieniając tryb konwertera dwukierunkowego. 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ę bazową, 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-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
Room ma teraz interfejsy API do udostępniania instancji konwerterów typów, dzięki czemu aplikacja może kontrolować ich inicjalizację. 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. zarchiwizowanie bazy danych w formacie .gz. Dziękujemy użytkownikowi „Ahmed El-Helw” (ahmedre@gmail.com) (3e6792, b/146911060).
Zmiany interfejsu API
Dodano brakujący cel do adnotacji
@ForeignKey
, aby zapobiec jej używaniu poza adnotacją@Entity
. (Iced1e).Pole
mCallbacks
wRoomDatabase.java
jest teraz ukryte. (d576cb, b/76109329)
Poprawki błędów
Aktualizacja dokumentacji TypeConverters, która wyjaśnia, że obiektów TypeConverters można używać tylko do konwertowania kolumn / pól, 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)
Zaktualizuj dokumentację metod dodawania/usuwania obserwatorów, aby ułatwić zrozumienie wątków (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.
Zastąp
ConcurrentHashMap
wRoomDatabase
wartościąCollections.synchronizedMap()
, aby uniknąć problemów na Androidzie Lollipop (d1cfc7, b/162431855)Dodaj wywołanie zwrotne onOpenPrepackagedDatabase podczas kopiowania gotowej bazy 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 zadeklarować metody DAO, których typ zwrotu to Flowable, Single, może i Competable. Dostępny jest też nowy artefakt
androidx.room:room-rxjava3
do obsługi RxJava3. (b/152427884)
Zmiany w interfejsie API
- Deklarowanie obiektu
@TypeConverter
w klasie obiektu Kotlin jest teraz obsługiwane. (b/151110764) - Opcja przyrostowego przetwarzania adnotacji w pokoju jest teraz domyślnie WŁĄCZONA. (b/112110217)
Wersja 2.3.0-alfa01
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 toandroidx.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ń z optymalizacją sal z projekcjami gwiazd. Pamiętaj, że funkcja@RewriteQueriesToDropUnusedColumns
nie zastępuje dostępnego rozwiązaniaroom.expandProjection
konfliktu kolumn w przypadku typów zwracanych zawierających 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)
- Aby uniknąć konfliktów wersji z innymi procesorami, które również używają protokołu ANTLR, pokój umieszcza teraz zależność ANTLR na procesorze adnotacji. (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ł w nowszych wersjach JDK przetwarzania adnotacji przyrostowych. (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ązaliśmy problem, który występował podczas wczytywania natywnych bibliotek SQLite w procesorze adnotacji w pokoju, który powodował awarię kompilatora ze względu na kompilację równoległą. (B/146217083)
Wersja 2.2.4
Wersja 2.2.4
19 lutego 2020 r.
Udostępniono 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.4
i androidx.room:room-testing:2.2.4
. 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 usługa Room generowała nieprawidłowy kod, gdy interfejs DAO w Kotlin miał określoną funkcję. (b/146825845)
Wersja 2.2.3
Wersja 2.2.3
18 grudnia 2019 r.
Usługa androidx.room:room-*:2.2.3
została zwolniona. 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.
Usługa androidx.room:room-*:2.2.2
została zwolniona. Wersja 2.2.2 zawiera te zatwierdzenia
Poprawki błędów.
- Naprawiono błąd, który powodował, że zbieranie relacji 1:1 z ponad 999 wierszami skutkowało zwróceniem przez pokój powiązanych elementów o wartości null. (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 kompilatoraexpandProjection
. (b/140759491) - Dodano mechanizm ponawiania prób obsługi brakującej biblioteki natywnej używanej do weryfikacji zapytań podczas kompilowania.
Wersja 2.2.0
Wersja 2.2.0
9 października 2019 r.
Usługa androidx.room:room-*:2.2.0
została zwolniona. 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ą teraz 2 nowe interfejsy API do tworzenia plikuRoomDatabase
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 (zwanej też tabelą złączającą). b/69201917 - Relacje jeden-do-jednego: zniesiono ograniczenie dotyczące pól typu POJO z adnotacją
@Relation
, które muszą być typuList
lubSet
. Dzięki temu można reprezentować relacje jednowartościowe.b/62905145 - Baza danych docelowych: adnotacje DAO
@Insert
,@Update
i@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 aktualizacje. b/127549506 - Procesy współbieżnych: metody
@Query
DAO mogą teraz zwracać typFlow<T>
. Jeśli tabele obserwacji w zapytaniu zostaną unieważnione, zwrócony przepływ ponownie utworzy nowy zbiór wartości. Zadeklarowanie funkcji DAO z typem zwracaniaChannel<T>
jest błędem. Zamiast tego Room zaleca użycie funkcjiFlow
, a potem użycie funkcji sąsiednich, aby przekonwertowaćFlow
naChannel
. 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 domyślnie. b/112110217 - Prognozy rozwijane: dodaliśmy nową eksperymentalną opcję kompilatora
room.expandProjection
, która sprawia, że usługa Room przepisuje zapytanie z odwzorowaniem gwiazdy tak, aby zawierała tylko kolumny powracającego typu POJO. Na przykład w przypadku metody DAO o nazwie@Query("SELECT * FROM Song")
, która zwraca obiekt POJO o nazwieSongIdAndTitle
z tylko 2 polami. Następnie Room zmieni zapytanie naSELECT id, title FROM Song
tak, aby pobrać minimalny zestaw kolumn odpowiadających typowi zwróconemu. 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.
Brak publicznych zmian od wersji 2.2.0-beta01
.
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 przestaje 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. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Przepływ koronek: metody DAO (
@Query
) mogą teraz zwracać typ zwracanyFlow<T>
. Jeśli tabele obserwacyjne w zapytaniu zostaną unieważnione, zwrócony przepływ ponownie wyemituje nowy zestaw wartości. Zadeklarowanie funkcji DAO ze zwrotem typuChannel<T>
jest błędem. Zamiast tego funkcja Room zachęca do użyciaFlow
, a następnie użycia sąsiednich funkcji do skonwertowaniaFlow
naChannel
. b/130428884 - Rozszerzanie projekcji: dodano nową eksperymentalną opcję kompilatora
room.expandProjection
, która powoduje, że Room przepisuje zapytanie z projekcją gwiazdy, 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 nazwieSongIdAndTitle
z tylko 2 polami. Następnie Room przekształci zapytanie naSELECT id, title FROM Song
, aby pobrać minimalny zestaw kolumn, który spełnia wymagania typu zwracanych danych. Zasadniczo eliminuje to ostrzeżenieCURSOR_MISMATCH
wyświetlane, gdy zapytanie zwraca dodatkowe kolumny, które nie pasują do żadnego pola w zwracającym typie POJO. onDestructiveMigrate
to nowy interfejs wywołania zwrotnego dodany doRoomDatabase.Callback
na wypadek, gdy Room musi przeprowadzić migrację bazy danych w trybie destruktywnym. 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
- Naprawiliśmy błąd, który powodował, że narzędzie invalidationTracker zgłaszało NPE w drugim procesie, gdy włączone było unieważnianie wielu instancji, a usługa unieważniania została przerwana. 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
i@Delete
. b/138664463 - Naprawiliśmy błąd, który powodował, że Room zgłasza brakujące metody gettera i settera dla kolumny ignorowanej 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 plikuRoomDatabase
na podstawie już wypełnionego pliku bazy danych.createFromAsset()
oznacza, że wstępnie wypełniony plik bazy danych znajduje się w folderze zasobów w pakiecie APK, acreateFromFile()
– gdy plik znajduje się w dowolnej lokalizacji. 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óra może służyć 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/64088772Uwaga: 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 1:1: W polach POJO oznaczonych adnotacją
@Relation
typuList
lubSet
zostało zniesione ograniczenie, co umożliwia reprezentowanie relacji pojedynczych wartości. b/62905145 - Jednostka docelowa: adnotacje DAO
@Insert
,@Update
i@Delete
mają teraz nową właściwośćtargetEntity
, która umożliwia określenie tabeli docelowej, do 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 aktualizacje. b/127549506 - Procesor adnotacji Gradle Incremental: Room jest teraz procesorem adnotacji Gradle, który izoluje i umożliwia zwiększanie za pomocą opcji procesora
room.incremental
. Więcej informacji znajdziesz w artykule Opcje narzędzia do kompilacji sal. Jeśli napotkasz jakieś problemy, zgłoś je tutaj. W przyszłej wersji stabilnej planujemy włączyć możliwość zwiększania domyślnie. b/112110217
Poprawki błędów
- W przypadku, gdy strumień Rx zapytania zostanie usunięty przed jego zakończeniem, Room nie będzie już przekazywać
EmptySetResultException
do globalnego modułu obsługi błędów. 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 - Sala nie będzie już generować adapterów DAO w nieprzetworzonych typach. 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
. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Ważne zmiany wprowadzone od wersji 2.0.0
- 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 dostosowanie są dostępne za pomocą metod adnotacji. - Widoki: sala obsługuje teraz deklarowanie klasy jako zapisanego zapytania (nazywanego też widokiem) przy użyciu adnotacji
@DatabaseView
. - Couroutines: metody DAO mogą teraz zawieszać funkcje. Aby korzystać z tej funkcji, uwzględnij w zależnościach atrybut
room-ktx
. Element ktx zawiera też funkcję rozszerzeniaRoomDatabase.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 do sal
@PrimaryKey
,@ColumnInfo
,@Embedded
i@Relation
można teraz zadeklarować w abstrakcyjnych metodach klasy z adnotacjami automatycznymi. 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 funkcje@Query
zawierające instrukcjeINSERT
,DELETE
lubUPDATE
, obsługują teraz typy zwracane RxCompletable
,Single
,Maybe
i typ zwracany GuavyListenableFuture
. Mogą one też być funkcjami zawieszania. enableMultiInstanceInvalidation
to nowy interfejs API wRoomDatabase.Builder
, który umożliwia unieważnienie wielu instancji RoomDatabase przy użyciu tego samego pliku bazy danych.fallbackToDestructiveMigrationOnDowngrade
to nowy interfejs API wRoomDatabase.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ąć 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 o podwójnym cudzysłowie w przypadku użytkowników 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 interfejsu API / działania
- Funkcja rozszerzenia
RoomDatabase.withTransaction
została zmieniona tak, aby nie przyjmować bloku funkcji z parametremCoroutineScope
. Zapobiega to pomijaniu dodatkowego koducoroutineScope { }
wymaganego do jednoczesnego uruchamiania elementów w bloku transakcji.
Poprawki błędów
- Naprawiliśmy błąd polegający na tym, że pokój nie mógł dopasować elementu TypeConverter dla funkcji DAO Kotlin zawierającej parametr typu kolekcji. b/122066791
Wersja 2.1.0-alpha06
22 marca 2019 r.
Zmiany interfejsu API / działania
- Zapytania dotyczące transakcji asynchronicznych są teraz serializowane, dzięki czemu pokój nie będzie używać więcej niż 1 wątku do wykonywania transakcji bazy danych.
Dodano
RoomDatabase.Builder.setTransactionExecutor(Executor)
, aby umożliwić skonfigurowanie wykonawcy, który będzie używany do transakcji. RoomDatabase.runInTransaction(Callable)
nie będzie już otaczać wyjątków zweryfikowanych w RuntimeExceptions. b/128623748
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że narzędzie do śledzenia unieważnień przestawało obserwować tabelę treści, gdyby dodano obserwatorzy zarówno w tabeli treści, jak i w zewnętrznej tabeli FTS treści. b/128508917
- Gramatyka SQLite została zaktualizowana, tak aby była zgodna z gramatyką SQLite w wersji 3.24.0. b/110883668
Wersja 2.1.0-alpha05
13 marca 2019 r.
Nowe funkcje
- Funkcja rozszerzenia
RoomDatabase.withTransaction
umożliwia bezpieczne wykonywanie transakcji bazy danych w ramach współbieżnej funkcji. Funkcje rozszerzeń pokoju wraz z obsługą coroutines są dostępne w artefakcieroom-ktx
. - Nieabstrakcyjne metody DAO otagowane jako
@Transaction
mogą teraz zawieszać funkcje. b/120241587
Zmiany w interfejsie API i zachowaniu
- Artefakt
room-coroutines
został przemianowany naroom-ktx
, aby zachować spójność nazewnictwa z innymi artefaktami androidx. - Funkcje
beginTransaction
,setTransactionSuccessful
iendTransaction
w funkcjiRoomDatabase
zostały wycofane na rzecz funkcjirunInTransaction
i funkcji rozszerzeniaroom-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
- Naprawiliśmy błąd polegający na tym, że usługa Room nie mogła poprawnie rozpoznawać funkcji zawieszania z parametrami, które były klasą wewnętrzną. b/123767877
- Naprawiliśmy błąd polegający na tym, że odroczona metoda DAO
@Query
z instrukcjamiINSERT
,UPDATE
lubDELETE
z zaangażowaniem przygotowywała zapytanie w wątku głównym. b/123695593 - Naprawiliśmy różne błędy powodujące, że usługa Room generowała nieprawidłowy kod dla niektórych funkcji zawieszania. b/123466702 i b/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 jest obecnie niedostępny w Maven Central (KT-27991). Ten problem można rozwiązać, dodającmaven { 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ą instrukcjeINSERT
,UPDATE
lubDELETE
, mogą teraz zwracać asynchroniczne typySingle
,Mayble
,Completable
iListenableFuture
. Mogą one też zawieszać 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 jakSingle
,Mayble
,Completable
,LiveData
lubListenableFuture
. 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.FAIL
iOnConflictStrategy.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
- Naprawiono błąd, który powodował nieprawidłowe oznaczanie odziedziczonych funkcji zawieszania w pokoju jako niezawieszonych. b/122902595
- Naprawiliśmy błąd, który powodował generowanie przez Room nieprawidłowego kodu, 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()
aendTransaction()
. b/120854786
Wersja 2.1.0-alfa03
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 Sala może korzystać z niestandardowych tokenizerów. Wbudowane dzielniki są nadal definiowane wFtsOptions
jako stałe ciągów 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 otagowane jako
@Insert
,@Delete
lub@Update
obsługują teraz typ zwracanych danychListenableFuture
. 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ł parametrów metody DAO jako finalnych w wygenerowanej implementacji. b/118015483
- Naprawiono błąd, który powodował awarię procesora pokoju podczas zgłaszania błędu dotyczącego zapytania ze specjalnymi symbolami. b/119520136
- Naprawiono błąd, przez który Room odrzucał inne implementacje funkcji
Collection
jako argumenty wyrażeniaIN
. 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
@DatabaseView
w definicji@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 typu zwracanego Rx. b/117201279
- Naprawiliśmy błąd, który powodował, że usługa Room nie znalazła odpowiedniego konwertera typu dla pola w klasie encji Kotlin. b/111404868
- Naprawiliśmy błąd, który powodował, że Room generował nieprawidłowy kod dla implementacji interfejsu
DAO
zawierającego 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 dostosowanie są dostępne za pomocą metod adnotacji. b/62356416 - Widoki: sala obsługuje teraz deklarowanie klasy jako zapisanego zapytania, znanego też jako widok z użyciem adnotacji @DatabaseView. b/67033276
- Wartość automatyczna: Room obsługuje teraz deklarowanie klas z adnotacjami AutoValue jako obiektów i obiektów POJO. Adnotacje do sal
@PrimaryKey
,@ColumnInfo
,@Embedded
i@Relation
można teraz zadeklarować w abstrakcyjnych metodach klasy z adnotacjami z wartościami automatycznymi. 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>
iMaybe<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 wersjiRoomDatabase.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/62334005fallbackToDestructiveMigrationOnDowngrade
: nowy interfejs API wRoomDatabase.Builder
, który automatycznie ponownie tworzy bazę danych, jeśli nastąpi obniżenie wersji. b/110416954ignoredColumns
: to nowy interfejs API w adnotacji@Entity
, którego można używać do wyświetlania listy ignorowanych pól według nazwy. Przydatne do ignorowania dziedziczonych pól w podmiocie. b/63522075
Zmiany interfejsu API / działania
- Sale
mCallback
imDatabase
wRoomDatabase
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 pełni przywracany po uszkodzeniu bazy danych lub nieprawidłowej migracji podczas inicjalizacji. b/111504749 i b/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 porównaniu z wersją 2.0.0-rc01.
Wersja 2.0.0-rc01
20 września 2018 r.
Wersja androidx.room 2.0.0-rc01
została udostępniona bez zmian od 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 taka sama jak sala 1.1.1-rc1
.
Wersja 1.1.1-rc1
16 maja 2018 r.
Jeśli używasz migracji, zdecydowanie zalecamy używanie sali 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 Rx
Single
iMaybe
, który powodował wcześniejsze odzyskiwanie zapytania, co powodowało problemy, jeśli do zwracanych instancjiSingle
lubMaybe
dodano 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 interfejsu API
- Na podstawie opinii z weryfikacji interfejsu API interfejs
@RawQuery
nie akceptuje już przekazywania parametru zapytaniaString
. 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
zamiastvararg 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ściobservedEntities
, o ile tylko obiekty te odwołują się do co najmniej 1 elementu za pomocą pólEmbedded
lubRelation
.b/74041772 - Stronicowanie: implementacja DataSource w pokoju prawidłowo obsługuje teraz zależności wielu tabel (takie jak 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-alfa1
22 stycznia 2018 r.
Nowe funkcje
RawQuery
: ten nowy interfejs API umożliwia metodom@Dao
otrzymywanie kodu SQL jako parametru zapytania b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: ten nowy interfejs API w wersjiRoomDatabase.Builder
zapewnia bardziej precyzyjną kontrolę nad tym, z których początkowych wersji schematu dozwolone są migracje do niszczycielskich wersji schematu (w porównaniu z funkcją zastępczych ToDestructiveMigration). 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 wersjialpha-4
lub nowszej i przełączyć się z wersjiLivePagedListProvider
naLivePagedListBuilder
, jeśli jeszcze tego nie zrobiono.
Poprawki błędów
- Ulepszona obsługa typów Kotlin Kapt. b/69164099
- Kolejność pól nie powoduje już unieważnienia schematu. b/64290754