Room
Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
---|---|---|---|---|
21 août 2024 | 2.6.1 | - | - | 2.7.0-alpha07 |
Déclarer des dépendances
Pour ajouter une dépendance sur Room, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.
Les dépendances pour Room incluent les tests de migrations Room et Room RxJava.
Ajoutez les dépendances des artefacts dont vous avez besoin dans le fichier build.gradle
de votre application ou module :
Groovy
dependencies { def room_version = "2.6.1" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // To use Kotlin annotation processing tool (kapt) kapt "androidx.room:room-compiler:$room_version" // To use Kotlin Symbol Processing (KSP) ksp "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" }
Kotlin
dependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") annotationProcessor("androidx.room:room-compiler:$room_version") // To use Kotlin annotation processing tool (kapt) kapt("androidx.room:room-compiler:$room_version") // To use Kotlin Symbol Processing (KSP) ksp("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") }
Pour en savoir plus sur l'utilisation du plug-in KAPT, consultez la documentation de KAPT.
Pour en savoir plus sur l'utilisation du plug-in KSP, consultez la documentation de démarrage rapide sur KSP.
Pour en savoir plus sur l'utilisation des extensions Kotlin, consultez la documentation sur les extensions KTX.
Pour en savoir plus sur les dépendances, consultez la page Ajouter des dépendances de compilation.
Si vous utilisez des bibliothèques autres qu'Android (par exemple, des modules Gradle Java ou Kotlin uniquement), vous pouvez utiliser les annotations Room grâce à androidx.room:room-common
.
Configurer les options du compilateur
Room dispose des options de processeur d'annotations suivantes.
room.schemaLocation |
directory
Permet d'exporter des schémas de base de données dans des fichiers JSON dans le . Consultez Migrations de Room pour en savoir plus. |
room.incremental |
boolean
Active le processeur d'annotations incrémentielles Gradle. Valeur par défaut est true .
|
room.generateKotlin |
boolean
Générez des fichiers sources Kotlin au lieu de Java. KSP requis. La valeur par défaut est false .
Pour en savoir plus, consultez les notes relatives à la version 2.6.0.
|
Utiliser le plug-in Room Gradle
Avec Room 2.6.0 ou version ultérieure, vous pouvez utiliser le plug-in Room Gradle pour configurer les options du compilateur Room. Le plug-in configure le projet qui a généré des schémas (qui sont une sortie des tâches de compilation consommées pour les migrations automatiques) sont correctement configurés pour être reproductibles compilations pouvant être mises en cache.
Pour ajouter le plug-in, dans votre fichier de compilation Gradle de premier niveau, définissez le le plug-in et sa version.
Groovy
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
Dans le fichier de compilation Gradle au niveau du module, appliquez le plug-in et utilisez room
.
.
Groovy
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
Vous devez définir un schemaDirectory
lorsque vous utilisez le plug-in Room Gradle. Ce
configure le compilateur Room, ainsi que les différentes tâches de compilation et ses backends
(javac, KAPT, KSP) pour générer des fichiers de schéma dans des dossiers aromatisés, par exemple
schemas/flavorOneDebug/com.package.MyDatabase/1.json
Ces fichiers doivent être
enregistrés dans le dépôt pour être utilisés pour la validation et les migrations automatiques.
Certaines options ne peuvent pas être configurées dans toutes les versions du plug-in Room Gradle.
même s'ils sont compatibles avec le compilateur Room. Le tableau ci-dessous répertorie chaque
et affiche la version du plug-in Room Gradle qui a ajouté la prise en charge de
configurer cette option à l'aide de l'extension room
. Si votre version est antérieure,
Si cette option n'est pas encore disponible, vous pouvez utiliser
options de processeur d'annotations à la place.
Option | Depuis la version |
---|---|
room.schemaLocation (obligatoire) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
Utiliser les options de processeur d'annotations
Si vous n'utilisez pas le plug-in Room Gradle ou si l'option que vous souhaitez n'est pas compatible avec votre version du plug-in, vous pouvez configurer Room à l'aide de du processeur d'annotations, comme décrit dans Ajoutez des dépendances de compilation. Comment vous spécifier les options d'annotation varie selon que vous utilisez KSP ou KAPT pour Room.
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... ) } } } }
Comme room.schemaLocation
est un répertoire et non un type primitif, il est
nécessaire d'utiliser un CommandLineArgumentsProvider
lors de l'ajout de cette option afin que
que Gradle connaît ce répertoire lors des vérifications à jour.
Migrer votre base de données Room
montre une implémentation complète de CommandLineArgumentsProvider
qui fournit
l'emplacement du schéma.
Commentaires
Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.
Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.
Version 2.7
Version 2.7.0-alpha07
21 août 2024
Publication d'androidx.room:room-*:2.7.0-alpha07
. La version 2.7.0-alpha07 contient ces commits.
Nouvelles fonctionnalités
- Le plug-in Gradle de Room ajoutera désormais automatiquement les schémas exportés aux sources de ressources de test d'instrumentation Android afin qu'ils puissent être utilisés par
MigrationTestHelper
.
Correction de bugs
- Correction d'un problème dans lequel la valeur "actual" de l'élément
RoomDatabaseConstructor
généré manquait le modificateur "actual" dans la fonctioninitialize
si cette fonction était également remplacée dans la déclaration "attend" (359631627). - Correction d'un problème dans lequel la valeur "réelle" générée du
RoomDatabaseConstructor
ne correspondait pas à la visibilité de la déclaration "attendu". (358138953).
Version 2.7.0-alpha06
7 août 2024
Publication d'androidx.room:room-*:2.7.0-alpha06
. La version 2.7.0-alpha06 contient ces commits.
Modifications apportées à l'API
- Modifiez la configuration d'instanciation pour un
RoomDatabase
dans un projet KMP.
En raison du modèle de compilation Kotlin 2.0, la stratégie de référencement d'une fonction à générer, nommée instantiateImpl()
, n'est plus viable. Ajout de deux nouvelles API, @ConstructedBy
et RoomDatabaseConstructor
, qui remplacent la stratégie instantiateImpl()
. Voici la nouvelle stratégie:
Définissez un objet attendu qui implémente
RoomDatabaseConstructor
.expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
Associez l'objet à la déclaration
@Database
à l'aide de@ConstructedBy
.@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
Créer une instance de base de données, mais sans transmettre d'argument de fabrique
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Corrections b/316978491, b/338446862 et (b/342905180).
- Prise en charge de
@RawQuery
dans Room KMP grâce à l'ajout d'une nouvelle API appeléeRoomRawQuery
, semblable àSupportSQLiteQuery
en termes de conservation dans la chaîne SQL brute et d'une fonction permettant de lier des arguments dans une instruction. Les fonctions annotées@RawQuery
peuvent désormais accepter unRoomRawQuery
comme paramètre unique. (Iea844, b/330586815). - Ajoutez une surcharge de
setQueryCallback()
qui accepte unCoroutineContext
. (Id66ff, b/309996304). - Ajout de la prise en charge des cibles de multiplateforme Kotlin
linuxArm64
. (I139d3, b/338268719)
Correction de bugs
- Correction d'un problème qui entraînait la génération incorrecte d'un appel à
recursiveFetchArrayMap
dans Room dans des cibles autres qu'Android. (710c36, b/352482325). - Correction d'un problème qui entraînait parfois la génération d'une exception pour "Expiration du délai d'une tentative de connexion" dans un projet KMP par Room. (fa72d0, b/347737870).
- Correction d'un problème dans les migrations automatiques qui entraînait la recherche de clés étrangères trop tôt avant que d'autres tables ne modifient leurs schémas pour se conformer aux nouvelles clés étrangères. (7672c0, b/352085724).
Version 2.7.0-alpha05
10 juillet 2024
Publication d'androidx.room:room-*:2.7.0-alpha05
. La version 2.7.0-alpha05 contient ces commits.
Modifications apportées à l'API
- Remplacement du nom
SQLiteKt
parSQLite
et du nomBundledSQLiteKt
parBundledSQLite
. (I8b501).
Correction de bugs
- Correction d'un bug qui provoquait un interblocage ou une erreur de
RoomDatabase
en cas d'expiration du délai de connexion lors de l'utilisation deAndroidSQLiteDriver
.
Version 2.7.0-alpha04
12 juin 2024
Publication d'androidx.room:room-*:2.7.0-alpha04
. La version 2.7.0-alpha04 contient ces commits.
Correction de bugs
- Correction d'un problème dans le processeur d'annotations de Room qui générait un code KMP incompatible lorsqu'un type renvoyé à plusieurs cartes était défini dans un DAO. (b/340983093).
- Correction d'un problème qui empêchait Room de trouver l'implémentation de la base de données générée si la classe annotée
@Database
ne comportait aucun package. (b/342097292). - Correction d'un problème où l'activation de la fermeture automatique et de l'invalidation de plusieurs instances entraînait parfois une
ConcurrentModificationException
lorsque la base de données était fermée automatiquement pour cause d'inactivité.
Version 2.7.0-alpha03
29 mai 2024
Publication d'androidx.room:room-*:2.7.0-alpha03
. La version 2.7.0-alpha03 contient ces commits.
Correction de bugs
- Corrigez divers problèmes concernant Kotlin 2.0 et KSP 2.0. Notez que Kotlin 2.0 compatible avec KSP 2 n'est pas terminé et que l'équipe travaille sur les différentes API et modifications de comportement du nouveau compilateur. (b/314151707).
Version 2.7.0-alpha02
14 mai 2024
Publication d'androidx.room:room-*:2.7.0-alpha02
. La version 2.7.0-alpha02 contient ces commits.
Correction de bugs
- Correction de divers problèmes liés à KSP.
Version 2.7.0-alpha01
1er mai 2024
Publication d'androidx.room:room-*:2.7.0-alpha01
. La version 2.7.0-alpha01 contient ces commits.
Nouvelles fonctionnalités
- Compatibilité avec la multiplateforme Kotlin (KMP): dans cette version, Room a été refactorisé pour devenir une bibliothèque de multiplateforme Kotlin (KMP). Bien qu'il reste encore du travail à faire, cette version introduit une nouvelle version de Room, dans laquelle la majorité des fonctionnalités ont été "communiquées" (conçues pour être multiplateformes). Les plates-formes actuellement compatibles sont Android, iOS, JVM (ordinateur de bureau), Mac natif et Linux natif. Toutes les fonctionnalités manquantes sur les nouvelles plates-formes compatibles seront rendues "complètes" dans les prochaines versions de Room.
Pour savoir comment commencer à utiliser Room KMP, veuillez consulter la documentation officielle de Room KMP.
- La génération de code Kotlin sur KSP a été activée par défaut si le traitement est effectué via KSP. Pour les projets KAPT ou Java uniquement, Room générera toujours des sources Java.
Modifications apportées à l'API
- Une surcharge de
Room.databaseBuilder()
a été ajoutée. Elle accepte un paramètre lambda destiné à être utilisé avec une fonction générée par Room pour éviter d'utiliser la réflexion lors de l'instanciation de l'implémentationRoomDatabase
générée. Exemple d'utilisation:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- Une API permettant de configurer une salle avec un
CoroutineContext
a été ajoutée au compilateur:RoomDatabase.Builder.setQueryCoroutineContext
. Notez qu'uneRoomDatabase
ne peut être configurée qu'avec des exécuteurs à l'aide desetQueryExecutor
ou avec un contexte de coroutine, mais pas les deux. - Une API permettant de configurer Room avec un pilote
SQLite
a été ajoutée:RoomDatabase.Builder.setDriver()
. Pour en savoir plus sur l'API PiloteSQLite
, consultez la documentation KMP SQLite. - Des API permettant d'accéder au
SQLiteConnection
sous-jacent à partir des API de pilote ont été ajoutées:RoomDatabase.useReaderConnection
etRoomDatabase.useWriterConnection
. - Les rappels liés à Varios Room ont désormais une version surchargée qui reçoit
SQLiteConnection
au lieu deSupportSQLiteDatabase
. Ils sont destinés à être remplacés lors de la migration vers un projet KMP. Pour en savoir plus sur la migration des utilisations de Room dans une application Android vers un module KMP courant, consultez le guide de migration. Les rappels sont les suivants: <ph type="x-smartling-placeholder">- </ph>
Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- L'artefact KTX
androidx.room:room-ktx
a été fusionné avecandroidx.room:room-runtime
avec toutes ses API. L'artefact est maintenant vide. Veuillez le supprimer de votre liste de dépendances.
Version 2.6
Version 2.6.1
29 novembre 2023
Publication d'androidx.room:room-*:2.6.1
. Liste des commits de la version 2.6.1
Correction de bugs
- Résolution du problème dans le code généré où la valeur par défaut des colonnes "Double" dans
EntityCursorConverter
était définie sur 0 au lieu de 0.0. Une solution potentielle pour un cas limite similaire pour les colonnes de type Float a également été incluse. (Id75f5, b/304584179). - Les exceptions générées par les chargements
PagingSource
seront désormais propagées en tant queLoadStateUpdate
deLoadResult.Error
contenant le Throwable. Cet état d'erreur est observable viaPagingDataAdapter.loadStateFlow(Views)
ouLazyPagingItems.loadState(Compose)
. Notez que cela marque un changement de comportement où, par le passé, des erreurs de chargement s'afficheront en tant qu'exception générée par la méthode dao ayant déclenché le chargement. (I93887, b/302708983).
Version 2.6.0
18 octobre 2023
Publication d'androidx.room:room-*:2.6.0
. Liste des commits de la version 2.6.0
Modifications importantes depuis la version 2.5.0
- L'option permettant d'activer la génération de code Kotlin (ou "CodeGen Kotlin") est désormais disponible dans Room KSP. (4297ec0). Pour activer la génération de code Kotlin dans Room, ajoutez le nom de l'option
room.generateKotlin
à vos options de processeur pour KSP. Pour savoir comment transmettre des options de processeur pour KSP, consultez la documentation KSP.
Remarque:Lorsque vous utilisez la génération de code Kotlin, il est important de noter que des restrictions supplémentaires ont été ajoutées. Les propriétés abstraites telles que les getters DAO ou les requêtes DAO dans le codeGen Kotlin ne sont pas autorisées. Elles doivent plutôt être réécrites en tant que fonctions pour éviter l'idée fausse selon laquelle la valeur de la propriété est immuable et a un résultat stocké fixe. Une autre restriction a été ajoutée : les types renvoyés de collection pouvant avoir une valeur nulle ne sont plus autorisés dans Room pour la génération de code Kotlin.
Avertissement:Vous constaterez peut-être que vos projets sont plus stricts en termes de possibilité de valeur nulle lorsque vous utilisez la génération de code Kotlin. Dans la génération de code Kotlin, la possibilité de valeur nulle des arguments de type est importante, bien qu'elle soit généralement ignorée en Java. Par exemple, supposons que vous ayez un type renvoyé `Flow<foo\>` et que la table est vide. Dans Java CodeGen, cela ne pose aucun problème, mais dans Kotlin CodeGen, vous obtenez une erreur. Pour éviter cela, vous devez utiliser `Flow<foo?\>`, en supposant qu'une valeur nulle est émise. </foo?\></foo\>
- Le nouvel artefact du plug-in Room Gradle a été ajouté à Room avec l'ID
androidx.room
, ce qui résout divers problèmes existants dans Room concernant les entrées et les sorties de schémas via les options du processeur d'annotations Gradle. Pour en savoir plus, consultez les notes de version de Room 2.6.0-alpha02. - Les classes de valeur des entités Room sont désormais compatibles avec KSP. (4194095).
- Les types renvoyés de Map imbriqués dans les fonctions DAO sont désormais pris en charge dans Room. (I13f48, 203008711).
Version 2.6.0-rc01
20 septembre 2023
Publication d'androidx.room:room-*:2.6.0-rc01
. Liste des commits de la version 2.6.0-rc01
Version 2.6.0-beta01
23 août 2023
Publication d'androidx.room:room-*:2.6.0-beta01
. Liste des commits de la version 2.6.0-beta01
Correction de bugs
- Gestion de l'exception
SQLite
spéciale lors de l'opération upsert rencontrée lorsque l'exception2067 SQLITE_CONSTRAINT_UNIQUE
est générée lors d'une opération upsert. Cette opération doit effectuer une mise à jour. (If2849, b/243039555).
Version 2.6.0-alpha03
9 août 2023
Publication d'androidx.room:room-*:2.6.0-alpha03
. Liste des commits de la version 2.6.0-alpha03.
Nouvelles fonctionnalités
- Les types renvoyés de Map imbriqués dans les fonctions DAO sont désormais pris en charge dans Room. (I13f48, 203008711).
Modifications apportées à l'API
- Une annotation de type appelée
@MapColumn
a été créée pour remplacer@MapInfo
, qui est désormais obsolète. Pour chaque nom de colonne (keyColumnName
,valueColumnName
ou les deux) fourni dans une annotation@MapInfo
, vous devez déclarer une annotation@MapColumn
uniquement aveccolumnName
et utiliser l'annotation sur l'argument de type spécifique référencé (la clé ou la valeur du mappage) dans le type renvoyé de la fonction DAO. En effet, l'annotation@MapColumn
est utilisée directement sur l'argument de type dans le type renvoyé d'une fonction DAO, et non sur la fonction elle-même, comme@MapInfo
. Pour en savoir plus, veuillez consulter la documentation@MapColumn
. (Ib0305, b/203008711). - Mise à jour des fichiers API pour annoter la suppression de la compatibilité. (I8e87a, b/287516207)
- Les API du plug-in Room Gradle ont été mises à jour de manière à ne pas toujours exiger des configurations par variante. Cela signifie que le plug-in peut accepter un emplacement global pour toutes les variantes sans créer plusieurs répertoires, ce qui permet des migrations plus fluides tout en étant suffisamment flexibles pour configurer manuellement des types de types ou des schémas de types de compilation, tout en conservant les avantages du plug-in (builds reproductibles et pouvant être mis en cache). (I09d6f, b/278266663).
Correction de bugs
- Correction d'une éventuelle fuite de mémoire dans
QueryInterceptorStatement
. (I193d1). - Correction d'un comportement incorrect dans la fonction
QueryInterceptorDatabase execSQL()
. (Iefdc8).
Version 2.6.0-alpha02
21 juin 2023
Publication d'androidx.room:room-*:2.6.0-alpha02
. Liste des commits de la version 2.6.0-alpha02.
Plug-in Room Gradle
Cette nouvelle version contient un nouvel artefact pour le plug-in Room Gradle avec l'ID androidx.room
, qui résout divers problèmes existants dans Room concernant l'utilisation d'entrées et de sorties de schémas via les options du processeur d'annotations Gradle. Le plug-in Gradle de Room configure le projet de sorte que les schémas générés qui sont utilisés pour les migrations automatiques et qui génèrent la sortie des tâches de compilation soient correctement configurés pour disposer de builds reproductibles et pouvant être mis en cache. Le plug-in propose un DSL pour configurer l'emplacement du schéma de base:
room {
schemaDirectory("$projectDir/schemas/")
}
Le plug-in configurera ensuite le compilateur Room, les différentes tâches de compilation et ses backends (javac, KAPT, KSP) pour générer les fichiers de schéma dans des dossiers personnalisés, par exemple schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Comme d'habitude, ces fichiers font l'objet d'un enregistrement dans le dépôt et sont utilisés pour la validation et les migrations automatiques. Lors de la migration vers le plug-in au lieu des options du processeur d'annotations, vous devez copier les fichiers de schéma existants dans les répertoires de types générés par le plug-in. Il s'agit d'une opération de migration unique qui doit être effectuée manuellement. La documentation sur les schémas sur developers.android.com sera mise à jour une fois que nous aurons reçu vos commentaires et que le plug-in sera stable. N'hésitez donc pas à l'essayer.
Modifications apportées à l'API
RoomDatabase.QueryCallback
a été défini comme une interface fonctionnelle permettant d'utiliser les conversions SAM. (Iab8ea, b/281008549).
Correction de bugs
- Résolution du problème lié à l'instanciation de la base de données dans Robolectric après la migration des sources Room de Java vers Kotlin. (Ic053c, b/274924903).
Version 2.6.0-alpha01
22 mars 2023
Publication d'androidx.room:room-*:2.6.0-alpha01
. Liste des commits de la version 2.6.0-alpha01.
Nouvelles fonctionnalités
- Prise en charge des classes de valeur dans Room pour KSP. Room est désormais compatible avec les classes de valeur dans les entités. (4194095).
- La génération de code Kotlin(ou "Kotlin CodeGen") peut désormais être activée dans Room (4297ec0). Pour activer la génération de code Kotlin dans Room, ajoutez le nom de l'option
room.generateKotlin
à vos options de processeur pour KSP. Pour savoir comment transmettre des options de processeur pour KSP, consultez la documentation KSP.
Remarque:Lorsque vous utilisez la génération de code Kotlin, il est important de noter que des restrictions supplémentaires ont été ajoutées. Les propriétés abstraites telles que les getters DAO ou les requêtes DAO dans le codeGen Kotlin ne sont pas autorisées. Elles doivent plutôt être réécrites en tant que fonctions pour éviter l'idée fausse selon laquelle la valeur de la propriété est immuable et a un résultat stocké fixe. Une autre restriction a été ajoutée : les types renvoyés de collection pouvant avoir une valeur nulle ne sont plus autorisés dans Room pour la génération de code Kotlin.
Avertissement:Vous constaterez peut-être que vos projets sont plus stricts en termes de possibilité de valeur nulle lorsque vous utilisez la génération de code Kotlin. Dans la génération de code Kotlin, la possibilité de valeur nulle des arguments de type est importante, bien qu'elle soit généralement ignorée en Java. Par exemple, supposons que vous ayez un type renvoyé `Flow<foo\>` et que la table est vide. Dans Java CodeGen, cela ne pose aucun problème, mais dans Kotlin CodeGen, vous obtenez une erreur. Pour éviter cela, vous devez utiliser `Flow<foo?\>`, en supposant qu'une valeur nulle est émise. </foo?\></foo\>
Modifications apportées à l'API
- Protection contre l'utilisation insignifiante de collections pouvant avoir une valeur nulle dans les types renvoyés de la méthode DAO. (I777dc, b/253271782, b/259426907).
- Ajout d'une API pour créer un flux qui émet des modifications dans l'outil de suivi de l'invalidation. L'API est utile pour créer des flux qui doivent réagir aux modifications de la base de données. (I8c790, b/252899305).
Correction de bugs
- Interdisez les propriétés abstraites en tant que getters DAO ou requêtes DAO dans le codegen Kotlin. À la place, elles doivent être réécrites en tant que fonctions pour éviter l'idée fausse selon laquelle la valeur de la propriété est immuable et a un résultat stocké fixe. (If6a13, b/127483380, b/257967987).
Version 2.5.2
Version 2.5.2
21 juin 2023
Publication d'androidx.room:room-*:2.5.2
. Liste des commits de la version 2.5.2
Correction de bugs
- Correction d'un problème d'incompatibilité avec kotlinx-metadata-jvm. (386d5c).
- Correction d'un problème qui entraînait la génération d'une erreur par Room lors de l'utilisation d'un test Robolectric. (f79bea, b/274924903).
Version 2.5.1
Version 2.5.1
22 mars 2023
Publication d'androidx.room:room-*:2.5.1
. Liste des commits de la version 2.5.1.
Correction de bugs
- Évitez de vérifier le répertoire parent de la base de données dans
FrameworkSQLiteHelper
si celle-ci est déjà ouverte. (5de86b8). - Effectuez une vérification
isOpenInternal
pour vérifier si la base de données est déjà ouverte. (e91fb35). - Une meilleure gestion du cas réentrant est désormais disponible dans le fichier
acquireTransactionThread()
de Room. (219f98b). Lors d'une transaction de suspension, Room utilise un thread de l'exécuteur de transactions, y lance une boucle d'événements et lui envoie les opérations de suspension de base de données afin qu'elles soient toutes encapsulées dans la coroutine de transaction. On s'attend généralement à ce que le thread de transaction soit différent de celui qui démarre la transaction, mais dans certains cas, ils sont identiques. Pour gérer ces cas réentrants,withTransaction()
a été refactorisé pour ne plus s'appuyer sur une tâche de contrôle. À la place, il exécute le bloc de transaction de suspension à partir derunBlocking
dans le thread de transaction.
Version 2.5.0
Version 2.5.0
22 février 2023
Publication de androidx.room:room-paging-guava:2.5.0
, androidx.room:room-paging-rxjava2:2.5.0
et androidx.room:room-paging-rxjava3:2.5.0
. Liste des commits de la version 2.5.0
Version 2.5.0
11 janvier 2023
Publication de androidx.room:room-*:2.5.0
. Liste des commits de la version 2.5.0
Modifications importantes depuis la version 2.4.0
- Toutes les sources
room-runtime
ont été converties en Kotlin depuis Java. Notez que vous pouvez rencontrer des problèmes d'incompatibilité des sources si votre code est en Kotlin, en raison de la conversion de la bibliothèque en Kotlin. Par exemple, une modification incompatible avec la source est que, dansInvalidationTracker
, vous devrez désormais déclareronInvalidate()
dansObserver
pour avoir un paramètre de typeSet
et non de typeMutableSet
. De plus, certaines méthodes getter ont été converties en propriétés nécessitant la syntaxe d'accès aux propriétés sur les fichiers Kotlin. Veuillez signaler un bug en cas d'incompatibilités majeures. - Ajout d'une annotation de raccourci,
@Upsert
, qui tente d'insérer une entité s'il n'y a pas de conflit d'unicité ou de mettre à jour l'entité en cas de conflit. (I7aaab, b/241964353) - Ajout des artefacts de room-paging
room-paging-rxjava2
,room-paging-rxjava3
etroom-paging-guava
pour Room Paging. - Ajout d'API pour fournir des noms de tableaux de clés et de valeurs afin d'éviter toute ambiguïté dans
@MapInfo
(Icc4b5)
Version 2.5.0-rc01
7 décembre 2022
Publication d'androidx.room:room-*:2.5.0-rc01
. Liste des commits de la version 2.5.0-rc01
- Cette version est identique à la version
2.5.0-beta02
.
Version 2.5.0-beta02
9 novembre 2022
Publication d'androidx.room:room-*:2.5.0-beta02
. Liste des commits de la version 2.5.0-beta02
Modifications apportées à l'API
- Correction de diverses API qui convertissent des arguments de requête invariants (
Array<Any?>
) en contravariants (Array<out Any?>
) pour qu'ils correspondent au comportement du tableau Java. (b/253531073)
Version 2.5.0-beta01
5 octobre 2022
Publication d'androidx.room:room-*:2.5.0-beta01
. Liste des commits de la version 2.5.0-beta01.
Modifications apportées à l'API
- L'API 16 doit désormais correspondre à la version minimale qui prend en charge
@Upsert
, car il est impossible d'identifier une contrainte de clé primaire dans les API plus anciennes. (I5f67f, b/243039555)
Correction de bugs
- Correction d'un problème qui provoquait l'exportation incorrecte des tables fantômes vers les fichiers de schéma
.json
, ce qui les corrompait. (I4f83b, b/246751839)
Version 2.5.0-alpha03
24 août 2022
Publication d'androidx.room:room-*:2.5.0-alpha03
. Liste des commits de la version 2.5.0-alpha03.
Nouvelles fonctionnalités
- Ajout d'une annotation de raccourci,
@Upsert
, qui tente d'insérer une entité s'il n'y a pas de conflit d'unicité ou de mettre à jour l'entité en cas de conflit. (I7aaab, b/241964353)
Correction de bugs
- Lors de la vérification des contraintes de clé étrangère par migration automatique, Room générera désormais une
SQLiteConstraintException
au lieu d'uneIllegalStateException
. (I328dd) - Corrige une modification incompatible avec la source Kotlin pour les getter/propriétés de
getOpenHelper
,getQueryExecutor
etgetTransactionExecutor
. (Iad0ac)
Version 2.5.0-alpha02
1er juin 2022
Publication d'androidx.room:room-*:2.5.0-alpha02
. Liste des commits de la version 2.5.0-alpha02
Nouvelles fonctionnalités
- Ajout des artefacts
room-paging
room-paging-rxjava2
,room-paging-rxjava3
etroom-paging-guava
pour la prise en charge de Room Paging.(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/906)
Modifications apportées à l'API
room-runtime
a été entièrement converti en Kotlin depuis Java. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/6)Remarque : Vous pouvez rencontrer des problèmes d'incompatibilité des sources en raison de la conversion de la bibliothèque en Kotlin. Si votre code était en Kotlin et appelait l'ancienne version de Room, la nouvelle version devra gérer ces cas. Par exemple, une modification incompatible avec la source est que, dans
InvalidationTracker
, vous devrez désormais déclareronInvalidate()
dansObserver
pour avoir un paramètre de typeSet
et non de typeMutableSet
.- Ajout d'API pour fournir des noms de tableaux de clés et de valeurs afin d'éviter toute ambiguïté dans
@MapInfo
(Icc4b5) - Correction d'un problème de compatibilité des sources pour autoriser à nouveau
@Ignore
dans les getters de propriété. (Ifc2fb)
Correction de bugs
- Duplique l'algorithme heuristique de résolution des colonnes. Room va désormais tenter de résoudre les colonnes ambiguës dans une requête en multimap. Cela permet aux JOIN ayant des tableaux aux noms identiques d'être correctement mappés à un objet de données de résultat. (I4b444, b/201306012, b/212279118)
Version 2.5.0-alpha01
23 février 2022
Publication d'androidx.room:room-*:2.5.0-alpha01
. Liste des commits de la version 2.5.0-alpha01.
Modifications apportées à l'API
- Correction d'un problème où
@IntDef
de Room n'était pas utilisé dans les sources Kotlin. (I75f41, b/217951311) - Correction d'un problème de compatibilité des sources pour autoriser à nouveau
@Query
dans les getters de propriété. (I0a09b) - Conversion de room-common de Java vers Kotlin. (I69c48, b/206858235)
Remarque : Vous pouvez rencontrer des problèmes d'incompatibilité des sources, car certaines propriétés ont été déplacées vers des objets compagnons lors de la conversion de la bibliothèque en Kotlin. Si votre code était en Kotlin et appelait l'ancienne version de Room, il faudra apposer le suffixe ".Companion" à la nouvelle version pour accéder à ces propriétés.
- Conversion de room-migration de Java vers Kotlin. (I2724b, b/206858622)
- Conversion de fichiers associés à
paging
dansroom-runtime
de Java en Kotlin. (I82fc8, b/206859668) - Ajout d'API pour le verrouillage et l'utilisation de plusieurs processus au niveau de FrameworkSQLite*, afin de protéger les premières migrations et créations multiprocessus de bases de données. (Ied267, b/193182592)
Correction de bugs
- Ajout de la prise en charge des propriétés internes dans les sources Kotlin.
Il s'agit d'un léger changement de comportement dans Room, où le nom source des fonctions sera utilisé pour les associer à des propriétés en tant que getters/setters (auparavant, Room utilisait le nom JVM de la fonction, qui est différent pour les fonctions/propriétés internes).
Si vous utilisez des annotations
@JvmName
personnalisées pour associer des getters/setters à des propriétés privées, veuillez vérifier le code généré après la mise à jour. (If6531, b/205289020).
Version 2.4.3
Version 2.4.3
27 juillet 2022
Publication d'androidx.room:room-*:2.4.3
. Liste des commits de la version 2.4.3
Correction de bugs
- Correction d'un problème qui empêchait Room de reconnaître les fonctions de suspension dans Kotlin 1.7. (b/236612358)
Version 2.4.2
Version 2.4.2
23 février 2022
Publication d'androidx.room:room-*:2.4.2
. Liste des commits de la version 2.4.2
Correction de bugs
- Résolution d'un problème de génération de code pour une fonction de suspension
@Transaction
de DAO avec un corps qui génère une méthode d'interface par défaut en raison d'une compilation avec-Xjvm-default=all
ou équivalent. (Ia4ce5) - Correction d'un bug dans lequel Room génère du code pour une méthode de requête de type renvoyé
Array<ByteArray>
. (If086e, b/213789489)
Version 2.4.1
Version 2.4.1
12 janvier 2022
Publication d'androidx.room:room-*:2.4.1
. Liste des commits de la version 2.4.1
Correction de bugs
- Ajout de la prise en charge des propriétés internes dans les sources Kotlin.
Il s'agit d'un léger changement de comportement dans Room, où le nom source des fonctions sera utilisé pour les associer à des propriétés en tant que getters/setters (auparavant, Room utilisait le nom JVM de la fonction, qui est différent pour les fonctions/propriétés internes).
Si vous utilisez des annotations
@JvmName
personnalisées pour associer des getters/setters à des propriétés privées, veuillez vérifier le code généré après la mise à jour. (If6531, b/205289020).
Version 2.4.0
Version 2.4.0
15 décembre 2021
Publication d'androidx.room:room-*:2.4.0
. Liste des commits de la version 2.4.0.
Changements importants depuis la version 2.3.0
- Migrations automatiques : Room propose désormais une API permettant de générer automatiquement des migrations tant que les schémas sont exportés. Pour indiquer à Room qu'une migration automatique doit être générée, vous pouvez utiliser une nouvelle propriété
@Database#autoMigrations
pour déclarer les versions vers et depuis la migration automatique. Lorsque Room a besoin d'informations supplémentaires concernant le changement de nom ou de suppression de tableaux et de colonnes, l'annotation@AutoMigration
peut déclarer une classe de spécification contenant ces entrées. Consultez la documentation@AutoMigration
pour en savoir plus. - Injection de dépendances dans les migrations automatiques :
@ProvidedAutoMigrationSpec
est une nouvelle API permettant de déclarer qu'uneAutoMigrationSpec
sera fournie au moment de l'exécution viaRoomDatabase.Builder#addAutoMigrationSpec()
. Cela permet à un framework d'injection de dépendances de fournir ces spécifications lorsqu'elles nécessitent des dépendances complexes. - Prise en charge de l'assistant de test de migration pour les migrations automatiques : le
MigrationTestHelper
de Room a été mis à jour pour prendre en charge les migrations automatiques en fournissant une nouvelle API constructeur qui reçoit la classe de la base de données testée. Cela permet à l'assistant d'ajouter automatiquement et uniformément les migrations automatiques pendantrunMigrationsAndValidate
. - Assistance pour Room-Paging :
androidx.room:room-paging
est disponible et compatible avec Paging 3.0 en natif pour les requêtes de Room renvoyantandroidx.paging.PagingSource
. - Méthodes de requête associées : Room est désormais compatible avec les méthodes
@Dao
de types renvoyés en multimap, ce qui est utile pour les instructions JOIN. Les types en multimaps compatibles sontMap
,SparseArray
,LongSparseArray
, ainsi qu'ImmutableMap
,ImmutableSetMultimap
etImmutableListMultimap
de Guava.
Version 2.4.0-rc01
1er décembre 2021
Publication d'androidx.room:room-*:2.4.0-rc01
. Liste des commits de la version 2.4.0-rc01
Nouvelles fonctionnalités
- Mettez à jour la dépendance de Room vers la version
1.6.0-1.0.1
sur KSP pour prendre en charge Kotlin 1.6
Version 2.4.0-beta02
17 novembre 2021
Publication d'androidx.room:room-*:2.4.0-beta02
. Liste des commits de la version 2.4.0-beta02
Nouvelles fonctionnalités
- Ajout de la prise en charge de SparseArray et de LongSparseArray dans @MapInfo. (Ic91a2b/138910317)
Correction de bugs
- Ajout d'un nouvel analyseur de TypeConverter qui prend en compte les informations relatives à la possibilité de valeur nulle dans les types. Étant donné que ces informations ne sont disponibles que dans KSP, elles sont activées par défaut uniquement dans KSP. En cas de problème, vous pouvez les désactiver en transmettant room.useNullAwareTypeAnalysis=false au processeur d'annotations. Si cela se produit, veuillez signaler un bug, car cet indicateur sera supprimé. Avec ce nouvel analyseur de TypeConverter, il est recommandé de ne fournir que des types de TypeConverters non nuls, car le nouvel analyseur peut les encapsuler grâce à une vérification des valeurs nulles. Notez que cela n'a aucun impact pour les utilisateurs de KAPT ou de Java, car les processeurs d'annotation (contrairement à KSP) n'ont pas d'informations de valeur nulle dans les types. (Ia88f9, b/193437407)
- Correction d'un bug qui provoquait l'échec de la compilation de Room avec une erreur SQL lorsqu'une entité FTS déclarait utiliser le jeton ICU. (I00db9, b/201753224)
- Résolution d'un problème lors des migrations automatiques concernant une nouvelle colonne ajoutée à une entité intégrée entre les versions. (I5fcb1b/193798291)
- Correction d'un problème concernant les types renvoyés des méthodes de requêtes associées dans les requêtes LEFT JOIN. Avec ces modifications, dans le cas d'un mappage de type un à plusieurs, la collection renvoyée pour une clé n'inclura pas l'objet de valeur non valide s'il ne se trouve pas dans le curseur. Si aucune valeur valide n'est trouvée, alors une clé est mappée à une collection vide. (Id5552b/201946438)
- Correction d'un problème lié à la migration automatique et dans lequel les mots-clés SQLite qui ne parvenaient pas à être échappés dans les noms de colonnes. (Idbed4b/197133152)
Version 2.4.0-beta01
13 octobre 2021
Publication d'androidx.room:room-*:2.4.0-beta01
. Liste des commits de la version 2.4.0-beta01
Correction de bugs
- Correction d'un problème concernant les migrations automatiques qui n'ajoutaient pas de nouvelles colonnes lorsqu'une autre table de la même migration comportait également une nouvelle colonne du même nom. (Ia5db5, b/200818663)
- L'implémentation de PagingSource générée par la room-paging utilise désormais le
queryExecutor
transmis viaRoomDatabase.Builder
. Il peut donc être remplacé, au lieu de remplacerDispatchers.IO
, comme c'était le cas auparavant. (Iae259)
Version 2.4.0-alpha05
29 septembre 2021
Publication d'androidx.room:room-*:2.4.0-alpha05
. Liste des commits de la version 2.4.0-alpha05
Nouvelles fonctionnalités
- Ajout d'un convertisseur de type intégré pour UUID. (I671e8, b/73132006)
Modifications apportées à l'API
Ajout d'une nouvelle propriété à l'annotation TypeConverters pour permettre aux développeurs de désactiver les convertisseurs Enum et UUID intégrés. Par défaut, ces convertisseurs sont activés, mais vous pouvez les désactiver pour un certain champ d'application ou pour l'ensemble de la base de données. Pour en savoir plus, consultez la documentation sur TypeConverters. (36ae9e, b/195413406)
Prise en charge des clés/valeurs non-POJO pour les types renvoyés en multimap dans les DAO via l'annotation
@MapInfo
. (I4d704)
@MapInfo
est requis lorsque la colonne clé ou valeur de la map provient d'une seule colonne. Voici un exemple :
@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>
- Déclarer
room-paging
comme artefact obligatoire lorsque Paging3 est utilisé avec Room. (Ieaffe)
Correction de bugs
- Correction d'un problème qui empêchait de classer correctement les résultats de requêtes en multimap lorsque la requête contenait une clause ORDER BY d'une colonne de la clé de la map. (I6b887)
Contribution externe
- Ajout d'une API pour spécifier l'ordre de l'index dans @Index. Merci à Nikita Zhelonkin. (I033fc)
Version 2.4.0-alpha04
21 juillet 2021
Publication d'androidx.room:room-*:2.4.0-alpha04
. Liste des commits de la version 2.4.0-alpha04
Nouvelles fonctionnalités
Room est désormais compatible avec les méthodes
@Dao
de types renvoyés en multimap, ce qui est utile pour les instructions JOIN. Les types de multimap pris en charge sontMap
, ainsi queImmutableMap
,ImmutableSetMultimap
etImmutableListMultimap
de Guava.Voici des exemples de requêtes en multimap :
Map des relations un à un
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
Map des relations un à plusieurs (multimap standard)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
Le résultat en multimap peut également être encapsulé dans les types renvoyés asynchrones compatibles, tels que
LiveData
,Observable
de Rx ou les coroutinesFlow
.
Room-Paging
androidx.room:room-paging
est disponible et compatible avec Paging 3.0 en natif pour les requêtes de Room renvoyantandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
Cet artefact remplace l'implémentation
androidx.paging.PagingSource
générée par Room par une implémentation basée sur les API Paging 3.0. La nouvelle implémentation de PagingSource analyse les clés différemment. Toute clé fournie manuellement à PagingSource de Room doit donc tenir compte de ce changement de comportement, y compris l'initialKey transmise via le constructeur de Pager. Les pages commenceront à se charger à partir deKey
,Key
étant le premier élément chargé. Cela diffère du comportement existant, oùLoadParams.Refresh.Key
est traité comme la position de défilement de l'utilisateur et où les éléments sont chargés avant et après la clé.L'artefact est facultatif et si vous choisissez de ne pas l'activer, alors vous reviendrez à la prise en charge existante de Paging 3.0, introduite par Room 2.3. Toutefois, cet artefact sera obligatoire dans la prochaine version pour les utilisateurs de Room avec Paging 3.0. Pour l'activer, ajoutez le nouvel artefact room-paging à votre chemin de classe. Si vous utilisez Gradle, vous pouvez ajouter l'extrait de code suivant à votre build.gradle :
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
Correction de bugs
- Correction d'un problème dans les migrations automatiques lors du traitement des violations des clés étrangères. (b/190113935)
Version 2.4.0-alpha03
16 juin 2021
Publication d'androidx.room:room-*:2.4.0-alpha03
. Liste des commits de la version 2.4.0-alpha03
Modifications apportées à l'API
- Mise à jour du
MigrationTestHelper
de Room pour prendre en charge les migrations automatiques en fournissant une nouvelle API constructeur qui reçoit la classe de la base de données testée. Cela permet à l'assistant d'ajouter automatiquement et uniformément les migrations automatiques pendantrunMigrationsAndValidate
.
Correction de bugs
Correction d'un problème lié à la bibliothèque native SQLite de Room pour prendre en charge les puces Apple M1. (b/174695268
Correction d'un problème qui empêchait Room de générer des erreurs lorsque le type renvoyé d'une fonction @Transaction était un flux. (I56ddd, b/190075899)
Correction d'un problème lié aux index des migrations automatiques. b/177673291
Mises à jour des dépendances
- La compatibilité de KSP avec Room dépend désormais de KSP
1.5.10-1.0.0-beta01
. (1ecb11, b/160322705)
Version 2.4.0-alpha02
5 mai 2021
Publication d'androidx.room:room-*:2.4.0-alpha02
. Liste des commits de la version 2.4.0-alpha02
Modifications apportées à l'API
@ProvidedAutoMigrationSpec
est une nouvelle API permettant de déclarer qu'uneAutoMigrationSpec
sera fournie au moment de l'exécution viaRoomDatabase.Builder#addAutoMigrationSpec()
. Cela permet à un framework d'injection de dépendances de fournir ces spécifications lorsqu'elles nécessitent des dépendances complexes.
Correction de bugs
- Correction d'un problème lié aux migrations automatiques dans lequel les
@DatabaseView
s ne sont pas recréées correctement.
Contribution externe
- Correction d'un problème dans le
JournalMode.TRUNCATE
de Room où le rappel àInvalidationTracker
se faisait parfois de manière incorrecte, trop tard, ou pas du tout. Merci àUli Bubenheimer | [email protected]
. (b/154040286)
Version 2.4.0-alpha01
21 avril 2021
Publication d'androidx.room:room-*:2.4.0-alpha01
. Liste des commits de la version 2.4.0-alpha01
Nouvelles fonctionnalités
- Migrations automatiques : Room propose désormais une API permettant de générer automatiquement des migrations tant que les schémas sont exportés. Pour indiquer à Room qu'une migration automatique doit être générée, vous pouvez utiliser une nouvelle propriété
@Database#autoMigrations
pour déclarer les versions vers et depuis la migration automatique. Lorsque Room a besoin d'informations supplémentaires concernant le changement de nom ou de suppression de tableaux et de colonnes, l'annotation@AutoMigration
peut déclarer une classe de spécification contenant ces entrées. Consultez la documentation@AutoMigration
pour en savoir plus.
Correction de bugs
- Correction d'un problème de validation incorrecte de
defaultValue
avec des parenthèses supplémentaires par le schéma de validation de Room. b/182284899
Version 2.3.0
Version 2.3.0
21 avril 2021
Publication d'androidx.room:room-*:2.3.0
. Liste des commits de la version 2.3.0
Changements importants depuis la version 2.2.0
- Prise en charge intégrée de l'énumération : si aucun convertisseur n'est fourni, Room utilise désormais par défaut un convertisseur énumération vers chaîne et inversement. Si un convertisseur de type existe déjà pour une énumération, Room l'utilisera en priorité.
- Rappel de requête : Room propose désormais une API générale de callback, RoomDatabase.QueryCallback, pour les requêtes sur le point de s'exécuter, ce qui peut être utile pour la journalisation des versions de débogage. Le rappel peut être défini via
RoomDatabase.Builder#setQueryCallback()
. - Améliorations pré-empaquetées : Room dispose désormais d'API permettant de créer une base de données à l'aide d'une base de données pré-empaquetée dans un flux d'entrée. Cela permet, par exemple, d'utiliser une base de données pré-empaquetée compressée.
- Convertisseurs de types intégrés : Room dispose désormais d'API permettant de fournir des instances de convertisseurs de types afin que l'application puisse contrôler leur initialisation. Pour marquer un convertisseur de types qui sera fourni à Room, utilisez la nouvelle annotation @ProvidedTypeConverter.
- Compatibilité RxJava3 : Room est désormais compatible avec les types RxJava3. Comme pour RxJava2, vous pouvez déclarer des méthodes DAO dont le type renvoyé est "Flowable", "Single", "Maybe" et "Completable". De plus, un nouvel artefact
androidx.room:room-rxjava3
est disponible pour prendre en charge RxJava3. - Compatibilité avec Paging 3.0 : Room peut désormais générer des implémentations pour les méthodes
@Query
annotées dont le type renvoyé estandroidx.paging.PagingSource
.
Version 2.3.0-rc01
24 mars 2021
Publication d'androidx.room:room-*:2.3.0-rc01
. Liste des commits de la version 2.3.0-rc01
Correction de bugs
- Correction d'un problème empêchant les requêtes de flux de coroutines créées par Room d'être utilisées dans un bloc de suspension
withTransaction
. (I797bf)
Version 2.3.0-beta03
10 mars 2021
Publication d'androidx.room:room-*:2.3.0-beta03
. Liste des commits de la version 2.3.0-beta03
Nouvelles fonctionnalités
- Ajout de la prise en charge de la compilation incrémentielle pour KSP. (I031c1, b/176453350)
Correction de bugs
- Correction d'un bug qui provoquait un ANR lors de la création de PagingSource sur le thread principal. (I42b74, b/181221318)
- Correction de la visibilité de
@ExperimentalRoomApi
, qui est désormais publique, et non privée. (b/181356119)
Contribution externe
- Autoriser Room à accepter un type renvoyé POJO dans une méthode DAO annotée avec
@Query
lorsqu'elle est également annotée avec@SkipQueryVerification
. Room fera de son mieux pour convertir le résultat de la requête en type renvoyé POJO de la même manière que pour une méthode DAO annotée avec@RawQuery
. Merci à "Markus Riegel | [email protected]". (I45acb)
Version 2.3.0-beta02
18 février 2021
Publication d'androidx.room:room-*:2.3.0-beta02
. Liste des commits de la version 2.3.0-beta02
Nouvelles fonctionnalités
Room est désormais compatible, à titre expérimental, avec le traitement des symboles Kotlin (KSP).
KSP remplace KAPT pour exécuter les processeurs d'annotations de manière native sur le compilateur Kotlin, ce qui réduit considérablement les durées de compilation.
Pour utiliser Room avec KSP, vous pouvez appliquer le plug-in KSP de Gradle et remplacer la configuration
kapt
dans votre fichier de compilation parksp
. Par exemple, au lieu dekapt 'androidx.room:room-compiler:2.3.0-beta02'
, utilisezksp 'androidx.room:room-compiler:2.3.0-beta02'
. Consultez la documentation KSP pour en savoir plus.Notez que KSP est expérimental. Il est donc recommandé de continuer à utiliser KAPT pour le code de production. La réduction des durées de compilation ne s'applique que si aucun autre processeur n'utilise KAPT. Consultez b/160322705 pour en savoir plus sur les problèmes connus.
Version 2.3.0-beta01
27 janvier 2021
Publication d'androidx.room:room-*:2.3.0-beta01
. Liste des commits de la version 2.3.0-beta01
Nouvelles fonctionnalités
- Bases de données fermables automatiquement : Room peut désormais fermer les bases de données qui ne sont pas consultées après un certain temps. Il s'agit d'une fonctionnalité expérimentale qui peut être activée en appelant
RoomDatabase.Builder#setAutoCloseTimeout()
. Cette fonctionnalité est utile pour les applications comportant plusieurs bases de données.
Correction de bugs
- Correction d'un problème, dans lequel les méthodes DAO comportant plusieurs méthodes
@Update
ou@Delete
avec différentes stratégies de conflit généraient du code avec une seule de ces stratégies, en ignorant celle qui était définie. (/I0b90d, b/176138543)
Version 2.3.0-alpha04
16 décembre 2020
Publication d'androidx.room:room-*:2.3.0-alpha04
. Liste des commits de la version 2.3.0-alpha04
Nouvelles fonctionnalités
- Room propose désormais une API générale de callback
RoomDatabase.QueryCallback
, pour les requêtes sur le point de s'exécuter, ce qui peut être utile pour la journalisation des versions de débogage. Le rappel peut être défini viaRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608) - Si aucun convertisseur n'est fourni, Room utilise désormais par défaut un convertisseur énumération vers chaîne et inversement. Si un convertisseur de type existe déjà pour une énumération, Room l'utilisera en priorité. (b/73132006)
Problème connu
- Si un convertisseur de type unilatéral pour la lecture existe déjà pour l'énumération, il est possible que Room utilise accidentellement le convertisseur intégré de type chaîne vers énumération, ce qui n'est pas forcément souhaitable. Il s'agit d'un problème connu qui peut être résolu en créant un convertisseur bidirectionnel. Voir : b/175707691
Correction de bugs
- Correction d'un problème dans lequel Room désactivait par erreur le traitement des annotations incrémentielles dans les dernières versions de JDK. (b/171387388)
- Correction d'un problème qui empêchait Room de trouver la classe générée lorsque plusieurs chargeurs de classes étaient utilisés. Merci d'avoir corrigé le problème "Serendipity | [email protected]" ! (b/170141113)
- Correction d'un problème dans lequel Room générait un code incorrect lorsqu'un
@Dao
de Kotlin avait une classe de base dont les génériques étaient primitifs dans la JVM. (b/160258066)
Contribution externe
- Room utilisera désormais
beginTransactionNonExclusive
par défaut si le mode WAL est activé et si le niveau d'API est de 16 ou plus. Merci à "Ahmed I. Khalil | [email protected]" ! (b/126258791)
Version 2.3.0-alpha03
14 octobre 2020
Publication d'androidx.room:room-*:2.3.0-alpha03
. Liste des commits de la version 2.3.0-alpha03
Nouvelles fonctionnalités
Room dispose désormais d'API permettant de fournir des instances de convertisseurs de types afin que l'application puisse contrôler leur initialisation. Pour marquer un convertisseur de types qui sera fourni à Room, utilisez la nouvelle annotation
@ProvidedTypeConverter
. Merci à "mzgreen [email protected]". (Ie4fa5, b/121067210)Room dispose désormais d'API permettant de créer une base de données à l'aide d'une base de données pré-empaquetée dans un flux d'entrée. Cela permet, par exemple, d'utiliser une base de données pré-empaquetée compressée. Merci à "Ahmed El-Helw [email protected]". (3e6792, b/146911060)
Modifications apportées à l'API
Ajout d'une cible manquante à l'annotation
@ForeignKey
empêchant son utilisation en dehors de l'annotation@Entity
. (Iced1e)Le champ
mCallbacks
dansRoomDatabase.java
est maintenant masqué. (d576cb, b/76109329)
Correction de bugs
Mise à jour de la documentation relative aux TypeConverters afin de préciser que ces derniers ne peuvent être utilisés que pour convertir des colonnes/champs, et non des lignes. (I07c56, b/77307836)
Mise à jour vers le DaoProcessor pour corriger l'erreur du compilateur sur le DAO avec un super-type générique incluant des "primitives" Kotlin. (Ice6bb, b/160258066)
Mise à jour de la documentation relative aux méthodes des observateurs pour clarifier le threading. (Ifd1d9, b/153948821)
Correction d'un problème lié à la mauvaise validation des tableaux FTS par Room, pour ceux ayant déclaré leur colonne "id de ligne" (d62ebc, b/145858914)
Contributions externes
Résoudre les problèmes liés aux paramètres régionaux en majuscules/minuscules pour le Turc. (5746e3), b/68159494
Remplace la
ConcurrentHashMap
dansRoomDatabase
parCollections.synchronizedMap()
pour éviter les problèmes sur Android Lollipop. (d1cfc7, b/162431855)Ajout d'un rappel onOpenPrepackagedDatabase pour quand une base de données pré-empaquetée est copiée. (I1ba74, b/148934423)
Version 2.3.0-alpha02
22 juillet 2020
Publication d'androidx.room:room-*:2.3.0-alpha02
. Liste des commits de la version 2.3.0-alpha02
Nouvelles fonctionnalités
- Compatibilité RxJava3 : Room est désormais compatible avec les types RxJava3. Comme pour RxJava2, vous pouvez déclarer des méthodes DAO dont le type renvoyé est "Flowable", "Single", "Maybe" et "Completable". De plus, un nouvel artefact
androidx.room:room-rxjava3
est disponible pour prendre en charge RxJava3. (b/152427884)
Modifications apportées à l'API
- Vous pouvez maintenant déclarer une classe
@TypeConverter
dans la classe d'objets Kotlin. (b/151110764) - L'option de traitement des annotations incrémentielles de Room est désormais activée par défaut. (b/112110217)
Version 2.3.0-alpha01
10 juin 2020
Publication d'androidx.room:room-*:2.3.0-alpha01
. Liste des commits de la version 2.3.0-alpha01
Nouvelles fonctionnalités
Compatibilité avec Paging 3.0 : Room peut désormais générer des implémentations pour les méthodes
@Query
annotées dont le type renvoyé estandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Modifications apportées à l'API
@RewriteQueriesToDropUnusedColumns
est une nouvelle annotation pratique qui permet à Room de réécrire la projection "*" dans une requête de sorte à supprimer les colonnes inutilisées dans le résultat.- L'option de traitement
room.expandProjection
est désormais obsolète. Utilisez@RewriteQueriesToDropUnusedColumns
pour remplacer les requêtes d'optimisation de Room avec des projections en étoiles. Notez que@RewriteQueriesToDropUnusedColumns
ne remplace pas la solution de conflit des colonnesroom.expandProjection
concernant les types renvoyés contenant des champs@Embedded
.
Correction de bugs
- Correction d'un bug qui empêchait Room de détecter correctement la version JDK utilisée pour activer le processeur d'annotations incrémentielles. Merci à Blaz Solar ([email protected]). (b/155215201)
- Room intègre désormais sa dépendance ANTLR au processeur d'annotations pour éviter les conflits de versions avec d'autres processeurs qui utilisent également ANTLR. (b/150106190)
Version 2.2.6
Version 2.2.6
16 décembre 2020
Publication d'androidx.room:room-*:2.2.6
. Liste des commits de la version 2.2.6
Correction de bugs
- Correction d'un problème dans lequel Room désactivait par erreur le traitement des annotations incrémentielles dans les dernières versions de JDK. (b/171387388)
Version 2.2.5
Version 2.2.5
18 mars 2020
Publication d'androidx.room:room-*:2.2.5
. Liste des commits de la version 2.2.5
Correction de bugs
- Déclarer
MultiInstanceInvalidationService
directBootAware. Merci à "Mygod [email protected]". (b/148240967) - Correction d'un bug qui provoquait un plantage lorsque l'invalidation de plusieurs instances était activée et que la base de données contenait une entité FTS. (b/148969394)
- Correction d'un problème lors du chargement des bibliothèques natives SQLite dans le processeur d'annotations de Room, qui entraînait le plantage du compilateur en raison de compilations parallèles. (b/146217083)
Version 2.2.4
Version 2.2.4
19 février 2020
Publication d'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
et androidx.room:room-testing:2.2.4
. Liste des commits de la version 2.2.4
Correction de bugs
- Correction d'un problème de suspension des transactions qui s'interbloquaient si la coroutine était annulée rapidement avant le début de la transaction. (b/148181325)
- Correction d'un problème lié à la mauvaise utilisation de @Generated lors de la compilation avec JDK 9. (b/146538330)
- Correction d'un problème dans lequel Room générait un code incorrect lorsqu'une interface DAO en Kotlin avait une fonction concrète. (b/146825845)
Version 2.2.3
Version 2.2.3
18 décembre 2019
Publication d'androidx.room:room-*:2.2.3
. Liste des commits de la version 2.2.3
Correction de bugs
- Correction d'un bug qui empêchait Room de valider une base de données n'ayant pas fait l'objet d'une migration et contenant un ancien hachage avec des index dans son schéma. (b/139306173)
Version 2.2.2
Version 2.2.2
20 novembre 2019
Publication d'androidx.room:room-*:2.2.2
. Liste des commits de la version 2.2.2
Correction de bugs
- Correction d'un bug qui provoquait le renvoi d'éléments associés nuls dans Room lors de la collecte d'une relation de type un à un avec plus de 999 lignes. (b/143105450)
Version 2.2.1
Version 2.2.1
23 octobre 2019
Publication d'androidx.room:room-*:2.2.1
. Liste des commits de la version 2.2.1
Correction de bugs
- Correction d'un bug qui empêchait Room de signaler correctement une
CURSOR_MISMATCH
lorsque l'option de compilationexpandProjection
était activée. (b/140759491) - Ajout d'un mécanisme de nouvelle tentative pour gérer la bibliothèque native manquante utilisée pour vérifier les requêtes au moment de la compilation.
Version 2.2.0
Version 2.2.0
9 octobre 2019
Publication d'androidx.room:room-*:2.2.0
. Liste des commits de la version 2.2.0
Changements importants depuis la version 2.1.0
- Base de données pré-empaquetées : deux nouvelles API sont désormais disponibles dans
RoomDatabase.Builder
pour créer un objetRoomDatabase
à partir d'un fichier de base de données déjà renseigné.createFromAsset()
s'utilise lorsque le fichier de base de données déjà renseigné se trouve dans le dossier des éléments de l'APK, tandis quecreateFromFile()
s'utilise lorsque le fichier se trouve à un emplacement arbitraire. Utiliser ces API modifie le comportement des migrations destructives de sorte que, lors d'une migration de remplacement, Room essaye de copier à nouveau la base de données renseignée, si disponible. Sinon, Room abandonnera et créera à nouveau tous les tableaux. b/62185732 - Valeurs par défaut du schéma :
@ColumnInfo
dispose désormais d'une nouvelle propriétédefaultValue
qui peut être utilisée pour spécifier la valeur par défaut d'une colonne. Les valeurs par défaut font partie d'un schéma de base de données et sont validées lors des migrations, si elles sont spécifiées. b/64088772 - Relations plusieurs à plusieurs :
@Relation
a maintenant une nouvelle propriétéassociateBy
, qui accepte une nouvelle annotation@Junction
, utilisée pour déclarer une relation devant être satisfaite via un tableau de jonction (également appelé tableau de jointure). b/69201917 - Relations un à un : la restriction dans les champs POJO annotés avec
@Relation
pour être de typeList
ouSet
a été levée, ce qui permet de représenter les relations à valeur unique. b/62905145 - Entité cible : les annotations DAO
@Insert
,@Update
et@Delete
ont désormais une nouvelle propriététargetEntity
, qui permet de spécifier le tableau cible concerné par la méthode DAO. Ainsi, les paramètres de ces méthodes DAO sont des POJO arbitraires qui seront interprétés comme des entités partielles. En pratique, cela permet les insertions, les suppressions et les mises à jour partielles. b/127549506 - Flux de coroutines :
@Query
les méthodes DAO peuvent désormais être de type renvoyéFlow<T>
. Le flux renvoyé renvoie un nouvel ensemble de valeurs si les tableaux d'observation dans la requête sont invalidés. Déclarer une fonction DAO avec un type renvoyéChannel<T>
est une erreur, Room vous encourage plutôt à utiliserFlow
et les fonctions similaires pour convertir le flux (Flow
) en un canal (Channel
). b/130428884 - Processeur d'annotations incrémentielles Gradle : Room est désormais un processeur d'annotations permettant d'isoler Gradle et l'incrémentation peut être activée via l'option de processeur
room.incremental
. Pour en savoir plus, consultez la section Options du compilateur de Room. Si vous rencontrez des problèmes, veuillez signaler un bug ici. Nous prévoyons d'activer l'incrémentation par défaut dans une future version stable. b/112110217 - Projections étendues : une nouvelle option de compilateur expérimentale
room.expandProjection
a été ajoutée, ce qui permet à Room de réécrire une requête avec une projection en étoile pour n'avoir que les colonnes dans le type renvoyé POJO. Par exemple, pour une méthode DAO avec@Query("SELECT * FROM Song")
qui renvoie un POJO nomméSongIdAndTitle
avec seulement deux champs. Room réécrit la requête dansSELECT id, title FROM Song
pour extraire l'ensemble minimal de colonnes correspondant au type renvoyé. Cela élimine essentiellement l'avertissementCURSOR_MISMATCH
qui s'affiche lorsque la requête renvoie des colonnes supplémentaires qui ne correspondent à aucun champ du type POJO renvoyé.
Version 2.2.0-rc01
5 septembre 2019
Publication d'androidx.room:room:2.2.0-rc01
. Les commits inclus dans cette version sont disponibles sur cette page.
Aucune modification publique depuis Room 2.2.0-beta01
.
Version 2.2.0-beta01
22 août 2019
Publication d'androidx.room:room-*:2.2.0-beta01
. Les commits inclus dans cette version sont disponibles sur cette page.
Correction de bugs
- Correction d'un bug qui provoquait l'arrêt de la génération de nouvelles valeurs par une requête de flux de coroutine après un certain temps. (b/139175786)
- Correction d'un bug qui empêchait Room d'accepter un ancien code de hachage de schéma lors de l'ouverture d'une base de données n'ayant pas fait l'objet d'une migration depuis Room 1.0, provoquant un plantage de l'exécution en raison d'un schéma non valide. (b/139306173)
Version 2.2.0-alpha02
7 août 2019
Publication d'androidx.room:room-*:2.2.0-alpha02
. Les commits inclus dans cette version sont disponibles sur cette page.
Nouvelles fonctionnalités
- Flux de coroutines :
@Query
les méthodes DAO peuvent désormais être de type renvoyéFlow<T>
. Le flux renvoyé renvoie un nouvel ensemble de valeurs si les tableaux d'observation dans la requête sont invalidés. Déclarer une fonction DAO avec un type renvoyéChannel<T>
est une erreur, Room vous encourage plutôt à utiliserFlow
et les fonctions similaires pour convertir le flux (Flow
) en un canal (Channel
). b/130428884 - Projections étendues : une nouvelle option de compilateur expérimentale
room.expandProjection
a été ajoutée, ce qui permet à Room de réécrire une requête avec une projection en étoile pour n'avoir que les colonnes dans le type renvoyé POJO. Par exemple, pour une méthode DAO avec@Query("SELECT * FROM Song")
qui renvoie un POJO nomméSongIdAndTitle
avec seulement deux champs. Room réécrit la requête dansSELECT id, title FROM Song
pour extraire l'ensemble minimal de colonnes correspondant au type renvoyé. Cela élimine essentiellement l'avertissementCURSOR_MISMATCH
qui s'affiche lorsque la requête renvoie des colonnes supplémentaires qui ne correspondent à aucun champ du type POJO renvoyé. onDestructiveMigrate
est une nouvelle API de callback ajoutée àRoomDatabase.Callback
, utilisée lorsque Room migre destructivement une base de données. b/79962330
Correction de bugs
- Correction d'un bug pour lequel Room générait un code incorrect lors de l'utilisation d'un setter de champ lorsque le champ était protégé. b/136194628
- Correction d'un bug pour lequel l'InvalidationTracker envoyait un NPE dans un second processus lorsque l'invalidation de plusieurs instances était activée et que le service d'invalidation était fermé. b/137454915
- Correction d'un bug qui empêchait Room d'identifier correctement le type renvoyé d'une fonction de suspension héritée annotée avec
@RawQuery
. b/137878827 - Mise à jour du code généré pour
@Relation
lorsque la clé associée est de type BLOB afin d'utiliser unByteBuffer
comparable. b/137881998 - Correction d'un bug pour lequel Room signalait des setters manquants dans les POJO utilisés en tant que paramètres d'entité partiels de
@Insert
,@Update
et@Delete
. b/138664463 - Correction d'un bug dans lequel Room signalait des getters et setters manquants dans une colonne ignorée via
@Entity
lorsque la classe d'entité était utilisée dans certaines méthodes DAO. b/138238182{/2. - Correction d'un bug qui empêchait Room de convertir correctement les arguments de liaison nommés en arguments de position, ce qui entraînait une exception d'exécution lors de l'exécution d'une requête avec des paramètres réutilisés. b/137254857
Version 2.2.0-alpha01
10 juillet 2019
Nouvelles fonctionnalités
- Base de données pré-empaquetées : deux nouvelles API sont désormais disponibles dans
RoomDatabase.Builder
pour créer un objetRoomDatabase
à partir d'un fichier de base de données déjà renseigné.createFromAsset()
s'utilise lorsque le fichier de base de données déjà renseigné se trouve dans le dossier des éléments de l'APK, tandis quecreateFromFile()
s'utilise lorsque le fichier se trouve à un emplacement arbitraire. Utiliser ces API modifie le comportement des migrations destructives de sorte que, lors d'une migration de remplacement, Room essaye de copier à nouveau la base de données renseignée, si disponible. Sinon, Room abandonnera et créera à nouveau tous les tableaux. b/62185732 - Valeurs par défaut du schéma :
@ColumnInfo
dispose désormais d'une nouvelle propriétédefaultValue
qui peut être utilisée pour spécifier la valeur par défaut d'une colonne. Les valeurs par défaut font partie d'un schéma de base de données et sont validées lors des migrations, si elles sont spécifiées. b/64088772Remarque : Si votre schéma de base de données contient déjà des valeurs par défaut, telles que celles ajoutées via
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, et que vous décidez de définir des valeurs par défaut via@ColumnInfo
pour ces mêmes colonnes, vous devrez peut-être fournir une migration pour valider les valeurs par défaut non comptabilisées. Pour en savoir plus, consultez Migrations Room. - Relations plusieurs à plusieurs :
@Relation
a maintenant une nouvelle propriétéassociateBy
, qui accepte une nouvelle annotation@Junction
, utilisée pour déclarer une relation devant être satisfaite via un tableau de jonction (également appelé tableau de jointure). b/69201917 - Relations un à un : la restriction dans les champs POJO annotés avec
@Relation
pour être de typeList
ouSet
a été levée, ce qui permet de représenter les relations à valeur unique. b/62905145 - Entité cible : les annotations DAO
@Insert
,@Update
et@Delete
ont désormais une nouvelle propriététargetEntity
, qui permet de spécifier le tableau cible concerné par la méthode DAO. Ainsi, les paramètres de ces méthodes DAO sont des POJO arbitraires qui seront interprétés comme des entités partielles. En pratique, cela permet les insertions, les suppressions et les mises à jour partielles. b/127549506 - Processeur d'annotations incrémentielles Gradle : Room est désormais un processeur d'annotations permettant d'isoler Gradle et l'incrémentation peut être activée via l'option de processeur
room.incremental
. Pour en savoir plus, consultez la section Options du compilateur de Room. Si vous rencontrez des problèmes, veuillez signaler un bug ici. Nous prévoyons d'activer l'incrémentation par défaut dans une future version stable. b/112110217
Correction de bugs
- Room ne propagera plus
EmptySetResultException
au gestionnaire d'erreurs globales lorsque le flux Rx d'une requête aura été supprimé avant la fin de la requête. b/130257475 - Correction d'un bug pour lequel Room affichait un message d'erreur incorrect dans lorsqu'une fonction DAO de suspension annotée avec
@RawQuery
n'avait pas de type renvoyé. b/134303897 - Room ne générera plus d'adaptateurs DAO avec des types bruts. b/135747255
Version 2.1.0
Version 2.1.0
13 juin 2019
Publication de Room 2.1.0 sans aucune modification par rapport à la version 2.1.0-rc01
. Les commits inclus dans cette version sont disponibles sur cette page.
Changements importants depuis la version 2.0.0
- FTS : Room prend désormais en charge les entités contenant une table de mappage FTS3 ou FTS4. Les classes annotées avec
@Entity
peuvent désormais également être annotées avec@Fts3
ou@Fts4
pour déclarer une classe avec une table de recherche en texte intégral de mappage. Les options FTS pour une personnalisation plus avancée sont disponibles via les méthodes d'annotation. - Views : Room prend désormais en charge la déclaration d'une classe en tant que requête stockée, également appelée View à l'aide de l'annotation
@DatabaseView
. - Coroutines : les méthodes DAO peuvent désormais être des fonctions de suspension. Inclue
room-ktx
dans vos dépendances pour bénéficier de cette fonctionnalité. L'artefact ktx fournit également la fonction d'extensionRoomDatabase.withTransaction
pour effectuer des transactions de base de données dans une coroutine. - Valeur automatique : Room prend désormais en charge la déclaration des classes annotées AutoValue en tant qu'entités et que POJO. Les annotations Room
@PrimaryKey
,@ColumnInfo
,@Embedded
et@Relation
peuvent désormais être déclarées dans les méthodes abstraites de la classe avec des annotations de valeur automatique. Notez que ces annotations doivent également être accompagnées de@CopyAnnotations
pour que Room puisse les comprendre. - Compatibilité asynchrone supplémentaire : les méthodes DAO annotées avec
@Insert
,@Delete
ou@Update
, ainsi que@Query
contenant les instructionsINSERT
,DELETE
ouUPDATE
sont désormais compatibles avec les types renvoyés RxCompletable
,Single
etMaybe
, ainsi que les types renvoyésListenableFuture
de Guava. Elles peuvent également être suspendues. enableMultiInstanceInvalidation
est une nouvelle API deRoomDatabase.Builder
permettant l'invalidation de plusieurs instances de "RoomDatabase" à l'aide du même fichier de base de données.fallbackToDestructiveMigrationOnDowngrade
est une nouvelle API deRoomDatabase.Builder
permettant de recréer automatiquement la base de données en cas de retour à une version antérieure.ignoredColumns
est une nouvelle API de l'annotation@Entity
qui permet de répertorier les champs ignorés par leur nom.- Désormais, Room utilisera correctement le constructeur principal de Kotlin dans les classes de données afin d'éviter de devoir déclarer les propriétés en tant que
vars
.
Version 2.1.0-rc01
29 mai 2019
Correction de bugs
- Correction d'une erreur d'initialisation de Room, qui pouvait se produire en raison d'une configuration de "temp_store" déjà configurée. b/132602198
- Correction d'un avertissement concernant l'utilisation de guillemets doubles pour les utilisateurs de SQLite version 3.27.0 et ultérieure. b/131712640
- Correction d'un bug qui provoquait le plantage de l'InvalidationTracker lorsque plusieurs vérifications d'invalidation se produisaient en parallèle. b/133457594
Version 2.1.0-beta01
7 mai 2019
androidx.room 2.1.0-beta01
est disponible sans aucune modification par rapport à la version 2.1.0-alpha07. Les commits inclus dans cette version sont disponibles sur cette page.
Version 2.1.0-alpha07
25 avril 2019
Modifications apportées à l'API/Nouveaux comportements
- La fonction d'extension
RoomDatabase.withTransaction
a été modifiée pour ne plus utiliser un bloc fonction avec unCoroutineScope
comme destinataire. Cela évite d'ignorer le wrappercoroutineScope { }
supplémentaire nécessaire pour exécuter simultanément des éléments dans le bloc de transactions.
Correction de bugs
- Correction d'un bug qui empêchait Room de faire correspondre un TypeConverter pour une fonction DAO en Kotlin contenant un paramètre de type "Collection". b/122066791
Version 2.1.0-alpha06
22 mars 2019
Modifications apportées à l'API/Nouveaux comportements
- Les requêtes de transaction asynchrones sont maintenant sérialisées de sorte que Room n'utilise pas plus d'un thread pour exécuter des transactions de base de données.
RoomDatabase.Builder.setTransactionExecutor(Executor)
a été ajouté pour permettre la configuration de l'exécuteur pour les transactions. RoomDatabase.runInTransaction(Callable)
n'encapsulera plus d'exceptions vérifiées dans RuntimeExceptions. b/128623748
Correction de bugs
- Correction d'un bug qui empêchait l'outil de suivi d'invalidation d'observer le contenu d'un tableau si des observateurs étaient ajoutés à la fois pour le contenu du tableau et pour le contenu externe d'un tableau FTS. b/128508917
- Mise à jour de la grammaire SQLite de Room pour qu'elle corresponde à celle de SQLite 3.24.0. b/110883668
Version 2.1.0-alpha05
13 mars 2019
Nouvelles fonctionnalités
- La fonction d'extension
RoomDatabase.withTransaction
vous permet d'effectuer des transactions de base de données dans une coroutine de façon sécurisée. L'artefactroom-ktx
prend en charge les fonctions d'extension de Room ainsi que les coroutines. - Les méthodes DAO non abstraites annotées avec
@Transaction
peuvent désormais être des fonctions de suspension. b/120241587
Modifications apportées à l'API/Nouveaux comportements
- L'artefact
room-coroutines
a été renomméroom-ktx
et porte le même nom que les autres artefacts Androidx. beginTransaction
,setTransactionSuccessful
etendTransaction
dansRoomDatabase
ont été abandonnés au profit derunInTransaction
et de la fonction d'extensionroom-ktx
withTransaction
.
Correction de bugs
- Correction d'un bug qui provoquait la suppression des arguments de tokenisation si le jeton utilisé était SIMPLE. b/125427014
- Correction d'un bug qui empêchait Room d'identifier correctement les fonctions de suspension dont les paramètres correspondaient à une classe interne. b/123767877
- Correction d'un bug pour les méthodes DAO différées
@Query
dont les instructionsINSERT
,UPDATE
ouDELETE
préparaient la requête dans le thread principal. b/123695593 - Correction de bugs pour lesquels Room générait un code incorrect pour certaines fonctions de suspension. b/123466702 et b/123457323
- Correction d'un bug où les anciennes utilisations de certaines méthodes n'étaient pas correctement supprimées dans le code généré. b/117602586
- Mise à jour de la dépendance de Room à androidx.sqlite vers la version 1.0.2, qui contient des correctifs pour gérer correctement les bases de données corrompues. b/124476912
Problèmes connus
- Room 2.1.0-alpha05 dépend de l'artefact
kotlinx-metadata-jvm
, qui n'est actuellement pas disponible dans Maven Central. (KT-27991). Vous pouvez résoudre cette dépendance en ajoutantmaven { url "https://kotlin.bintray.com/kotlinx/" }
aux dépôts de votre projet.
Version 2.1.0-alpha04
25 janvier 2019
Nouvelles fonctionnalités
- Les méthodes DAO annotées avec
@Query
contenant des instructionsINSERT
,UPDATE
ouDELETE
peuvent désormais renvoyer des types asynchronesSingle
,Mayble
,Completable
etListenableFuture
. Elles peuvent également être des fonctions de suspension. b/120227284
Modifications apportées à l'API/Nouveaux comportements
- Room génère désormais une erreur si une méthode DAO non abstraite annotée avec
@Transaction
renvoie un type asynchrone tel queSingle
,Mayble
,Completable
,LiveData
ouListenableFuture
. Étant donné que les transactions sont cloisonnées dans les threads, il est actuellement impossible pour Room de démarrer et d'arrêter une transaction autour d'une fonction qui pourrait effectuer des requêtes dans différents threads. b/120109336 OnConflictStrategy.FAIL
etOnConflictStrategy.ROLLBACK
ont été abandonnés (@Deprecated
), car ils ne se comportent pas comme prévu avec les liaisons SQLite actuelles d'Android. b/117266738
Correction de bugs
- Correction d'un bug qui empêchait Room d'utiliser correctement le TypeConverter d'un type renvoyé si la méthode DAO était une fonction de suspension. b/122988159
- Correction d'un bug qui empêchait Room d'identifier correctement les fonctions de suspension héritées comme étant des fonctions sans suspension. b/122902595
- Correction d'un bug pour lequel Room générait un code incorrect dans Room lorsqu'un champ
@Embedded
se trouvait dans une classe parente et était utilisé dans plusieurs classes enfants. b/121099048 - Correction d'un problème pour lequel la base de données s'interbloquait lors de l'appel de fonction de suspension DAO entre une
beginTransaction()
et uneendTransaction()
. b/120854786
Version 2.1.0-alpha03
4 décembre 2018
Modifications apportées à l'API
- Le FTS
tokenizer
dans@Fts3
/@Fts4
utilise désormais une chaîne au lieu d'une énumération. Cela permet à Room d'utiliser des générateurs de jetons personnalisés. Les générateurs de jetons intégrés sont toujours définis dansFtsOptions
en tant que constantes de chaîne. b/119234881
Nouvelles fonctionnalités
- Coroutines : les méthodes DAO peuvent désormais être des fonctions de suspension. Publication d'un nouvel artefact,
room-coroutines
, pour permettre la suspension de fonctions dans Room. b/69474692 - Les méthodes DAO annotées avec
@Insert
,@Delete
ou@Update
prennent désormais en chargeListenableFuture
comme type renvoyé. b/119418331
Correction de bugs
- Correction d'un bug à cause duquel Room tentait par erreur de trouver un constructeur avec des colonnes dans la propriété
ignoredColumns
de@Entity
. b/119830714 - Correction d'un bug qui empêchait Room de marquer les paramètres de méthode DAO comme finaux dans l'implémentation générée. b/118015483
- Correction d'un bug provoquant le plantage du processeur de Room lors du signalement d'une erreur sur une requête contenant des symboles spéciaux. b/119520136
- Correction d'un bug provoquant le refus par Room de plusieurs implémentations de
Collection
en tant qu'arguments d'une expressionIN
. b/119884035 - Correction d'un bug provoquant la récupération de mémoire des "LiveData" renvoyées par Room lorsqu'elles étaient indéfiniment observées, empêchant ainsi l'émission de nouvelles données. b/74477406
- Mise à jour du verrouillage de fin de
RoomDatabase
pour réduire les conflits de verrouillage. b/117900450
Version 2.1.0-alpha02
30 octobre 2018
Nouvelles fonctionnalités
- Ajout de la prise en charge du référencement de
@DatabaseView
dans une@Relation
. b/117680932
Correction de bugs
- Correction d'un bug provoquant l'exécution d'opérations d'E/S de disque par Room dans le thread principal lors de l'abonnement ou de la suppression à partir d'un type renvoyé Rx. b/117201279
- Correction d'un bug qui empêchait Room de trouver un convertisseur de type approprié pour un champ dans une classe d'entité Kotlin. b/111404868
- Correction d'un bug entraînant la génération par Room d'un code incorrect pour une implémentation d'interface
DAO
contenant une méthode par défaut Kotlin sans argument. b/117527454 - Mise à jour de l'analyseur grammatical SQLite de Room pour corriger un problème de performances pouvant entraîner de longs délais de compilation. b/117401230
Version 2.1.0-alpha01
8 octobre 2018
Nouvelles fonctionnalités
- FTS : Room prend désormais en charge les entités contenant une table de mappage FTS3 ou FTS4. Les classes annotées avec
@Entity
peuvent désormais également être annotées avec@Fts3
ou@Fts4
pour déclarer une classe avec une table de recherche en texte intégral de mappage. Les options FTS pour une personnalisation plus avancée sont disponibles via les méthodes d'annotation. b/62356416 - Views : Room prend désormais en charge la déclaration d'une classe en tant que requête stockée, également appelée View à l'aide de l'annotation "@DatabaseView". b/67033276
- Valeur automatique : Room prend désormais en charge la déclaration des classes annotées AutoValue en tant qu'entités et que POJO. Les annotations
@PrimaryKey
,@ColumnInfo
,@Embedded
et@Relation
de Room peuvent désormais être déclarées dans les méthodes abstraites de la classe avec des annotations de valeur automatique. Notez que ces annotations doivent également être accompagnées de@CopyAnnotations
pour que Room puisse les comprendre. b/62408420 - Compatibilité supplémentaire avec les types renvoyés Rx : les méthodes DAO annotées avec
@Insert
,@Delete
ou@Update
sont désormais compatibles avec les types renvoyés RxCompletable
,Single<T>
etMaybe<T>
. b/63317956 - Types immuables avec
@Relation
: auparavant, Room exigeait que les champs portant l'annotation@Relation
puissent être définis, mais ils peuvent désormais servir de paramètres de constructeur. enableMultiInstanceInvalidation
est une nouvelle API deRoomDatabase.Builder
permettant l'invalidation de plusieurs instances de "RoomDatabase" à l'aide du même fichier de base de données. Ce mécanisme d'invalidation multi-instance fonctionne également pour plusieurs processus. b/62334005fallbackToDestructiveMigrationOnDowngrade
: une nouvelle API deRoomDatabase.Builder
permettant de recréer automatiquement la base de données en cas de retour à une version antérieure. b/110416954ignoredColumns
: nouvelle API de l'annotation@Entity
qui permet de répertorier les champs ignorés par leur nom. Utile pour ignorer les champs hérités d'une entité. b/63522075
Modifications apportées à l'API/Nouveaux comportements
mCallback
etmDatabase
dansRoomDatabase
sont désormais@Deprecated
et seront supprimés dans la prochaine version majeure de Room. b/76109329
Correction de bugs
- Correction de deux problèmes entraînant une mauvaise récupération de Room à partir d'une base de données corrompue ou d'une migration incorrecte lors de l'initialisation. b/111504749 et b/111519144
- Désormais, Room utilisera correctement le constructeur principal de Kotlin dans les classes de données afin d'éviter de devoir déclarer les champs en tant que
vars
. b/105769985
Version 2.0.0
Version 2.0.0
1er octobre 2018
Publication de androidx.room 2.0.0
sans aucune modification par rapport à la version 2.0.0-rc01.
Version 2.0.0-rc01
20 septembre 2018
Publication de androidx.room 2.0.0-rc01
sans aucune modification par rapport à la version 2.0.0-beta01.
Version 2.0.0-beta01
2 juillet 2018
Modifications apportées à l'API/Nouveaux comportements
- Ajout de
RoomDatabase.Builder.setQueryExecutor()
pour permettre la personnalisation de l'emplacement d'exécution des requêtes. - Ajout de la compatibilité avec RxJava2
Observable
. - Les implémentations de DAO et de base de données générées sont maintenant finales.
Correction de bugs
- Spécification du nom de la classe ou du champ dans l'erreur "Impossible de trouver la fonction "getter" pour le champ". b/73334503
- Correction de la rétrocompatibilité de RoomOpenHelper avec les anciennes versions de Room b/110197391
Dépendances antérieures à AndroidX
Pour les versions de Room antérieures à AndroidX ci-dessous, incluez les dépendances suivantes :
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"
}
Version 1.1.1
Version 1.1.1
19 juin 2018
Room 1.1.1
est identique à Room 1.1.1-rc1
.
Version 1.1.1-rc1
16 mai 2018 Nous vous recommandons vivement d'utiliser Room 1.1.1-rc1
au lieu de la version 1.1.0
si vous utilisez des migrations.
Correction d'un bug empêchant Room de gérer correctement l'initialisation après la migration. b/79362399
Version 1.1.0
Version 1.1.0-beta3
19 avril 2018
Correction de bugs
- Correction d'une erreur de compilation lorsqu'un POJO Kotlin fait référence à une entité relationnelle définie en Java. b/78199923
Version 1.1.0-beta2
5 avril 2018
Correction de bugs
Correction d'un bug critique dans les implémentations
Single
etMaybe
de Room Rx, dans lesquelles la requête était recyclée à l'avance, causant des problèmes si vous ajoutiez plus d'un observateur aux instancesSingle
ouMaybe
renvoyées. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] ne
VACUUM
la base de données si elle est appelée dans une transaction. b/77235565
Version 1.1.0-beta1
21 mars 2018
Modifications apportées à l'API
- Sur la base des commentaires relatifs à l'API,
@RawQuery
n'accepte plus la transmission d'uneString
comme paramètre de requête. Vous devez utiliser [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (voir [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] pour créer facilement une instance de [SupportSQLiteQuery][ref-SupportSQLiteQuery] avec prise en charge des arguments). - La méthode [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] de RoomDatabase.Builder accepte désormais
vararg int
au lieu devararg Integer
.
Correction de bugs
- [RoomDatabase.clearAllTables][ref-clearAllTables] tente maintenant de renvoyer de l'espace au système d'exploitation en définissant un point de contrôle WAL et en exécutant
VACUUM
sur la base de données. - [
@RawQuery
][ref-RawQuery] accepte désormais n'importe quel POJO pour la propriétéobservedEntities
, à condition que le POJO fasse référence à une ou plusieurs entités via ses champsEmbedded
ou sesRelation
s. b/74041772 - Paging : l'implémentation d'une DataSource de Room gère désormais correctement les dépendances multitables (telles que les relations et les jointures). Auparavant, l'activation de nouveaux résultats ou l'exécution d'une compilation échouaient. b/74128314
Version 1.1.0-alpha1
22 janvier 2018
Nouvelles fonctionnalités
RawQuery
: cette nouvelle API permet aux méthodes@Dao
de recevoir le SQL en tant que paramètre de requête. b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: cette nouvelle API deRoomDatabase.Builder
permet un contrôle plus précis des versions de schéma de départ à partir desquelles les migrations destructives sont autorisées (en comparaison avec la méthode "fallbackToDestructiveMigration"). b/64989640- Room ne prend désormais en charge que les API Paging les plus récentes (alpha-4 et ultérieures) et abandonne la prise en charge du
LivePagedListProvider
obsolète. Pour utiliser la nouvelle version alpha de Room, vous devez utiliser Pagingalpha-4
ou version ultérieure et passer deLivePagedListProvider
àLivePagedListBuilder
si vous ne l'avez pas déjà fait.
Correction de bugs
- Meilleure compatibilité avec les types Kapt de Kotlin. b/69164099
- L'ordre des champs n'invalide plus le schéma. b/64290754