Room
Actualización más reciente | Versión estable actual | Próxima versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
27 de enero de 2021 | 2.2.6 | - | 2.3.0-beta01 | - |
Cómo declarar dependencias
Para agregar una dependencia en Room, debes agregar el repositorio Maven de Google a tu proyecto. Consulta el repositorio Maven de Google para obtener más información.
Las dependencias de Room incluyen pruebas de migraciones de Room y Room RxJava.
Agrega las dependencias de los artefactos que necesites en el archivo build.gradle
de tu app o módulo:
Kotlin
dependencies { def room_version = "2.2.6" implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" // optional - Kotlin Extensions and Coroutines support for Room implementation "androidx.room:room-ktx:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" }
Java
dependencies { def room_version = "2.2.6" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // optional - RxJava support for Room implementation "androidx.room:room-rxjava2:$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" }
Para obtener información acerca del uso de extensiones de Kotlin, consulta la documentación de ktx.
Para obtener más información acerca de las dependencias, consulta Cómo agregar dependencias de compilación.
Cómo configurar las opciones del compilador
Room tiene las siguientes opciones de procesador de anotaciones:
room.schemaLocation
: Configura y permite exportar esquemas de bases de datos a archivos JSON en el directorio determinado. Para obtener más información, consulta Migraciones de Room.room.incremental
: habilita el procesador de anotaciones graduales de Gradle.room.expandProjection
: configura Room para reescribir búsquedas, de modo que se expanda su proyección superior destacada para contener solo las columnas definidas en el tipo de datos que se muestra del método DAO.
En el siguiente fragmento de código, se muestra un ejemplo de cómo se pueden configurar estas opciones:
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += [ "room.schemaLocation":"$projectDir/schemas".toString(), "room.incremental":"true", "room.expandProjection":"true"] } } } }
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes en esta biblioteca antes de crear uno nuevo. Para agregar tu voto a un error existente, haz clic en el botón de la estrella.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 2.3.0
Versión 2.3.0-beta01
27 de enero de 2021
Lanzamiento de androidx.room:room-*:2.3.0-beta01
. La versión 2.3.0-beta01 contiene estas confirmaciones.
Nuevas funciones
- Bases de datos con cierre automático: Room ahora puede cerrar bases de datos a las que no se accede después de un período determinado. Esta es una función experimental y se puede habilitar mediante una llamada a
RoomDatabase.Builder#setAutoCloseTimeout()
. Esta función resulta útil para apps que tienen varias bases de datos.
Correcciones de errores
- Se solucionó un problema por el que los métodos Dao que contenían varios métodos
@Update
o@Delete
y diferentes estrategias de conflicto generaban código con una sola estrategia, sin tener en cuenta la que estaba definida. (/I0b90d, b/176138543)
Versión 2.3.0-alpha04
16 de diciembre de 2020
Lanzamiento de androidx.room:room-*:2.3.0-alpha04
. La versión 2.3.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- Ahora, Room ofrece una API de callback general
RoomDatabase.QueryCallback
, para cuando las consultas están por ejecutarse, lo que puede ser útil para acceder a compilaciones de depuración. Se puede configurar la devolución de llamada medianteRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608) - Ahora, Room usará de forma predeterminada el conversor de tipo Enum a String, y viceversa, si no se proporciona ninguno. Si ya existe un conversor de tipo para una enumeración, Room priorizará su uso en el valor predeterminado. (b/73132006)
Problema conocido
- Si ya existe un conversor de tipo unidireccional para la lectura, Room podría usar accidentalmente el conversor Enum a String, lo que podría no ser lo deseado. Este es un problema conocido y se puede solucionar convirtiéndolo en un conversor bidireccional. Consulta b/175707691
Correcciones de errores
- Se solucionó un problema en el que Room inhabilitaba de manera incorrecta el procesamiento de anotaciones incrementales en versiones más recientes del JDK. (b/171387388)
- Se solucionó un problema en el que Room encontraba la clase generada cuando se usaban múltiples cargadores de clases. Gracias por la corrección, "Serendipity | 892449346@qq.com". (b/170141113)
- Se solucionó un problema por el que Room generaba códigos incorrectos cuando un elemento
@Dao
de Kotlin tenía una clase base cuyos genéricos eran primitivos en la JVM. (b/160258066)
Contribución externa
- Ahora, Room usará el modo
beginTransactionNonExclusive
si el modo WAL está habilitado y el nivel de API es 16 o más. Gracias a "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com". (b/126258791)
Versión 2.3.0-alpha03
14 de octubre de 2020
Lanzamiento de androidx.room:room-*:2.3.0-alpha03
. La versión 2.3.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
Ahora Room tiene API para proporcionar instancias de convertidores de tipo, de modo que la app pueda controlar su inicialización. Para marcar un convertidor de tipo que se enviará a Room, usa la nueva anotación
@ProvidedTypeConverter
. Gracias a "mzgreen yairobbe@gmail.com" (Ie4fa5, b/121067210).Ahora Room tiene API para crear una base de datos mediante una lectura de base de datos empaquetada previamente de un flujo de entrada. Esto permite casos como cuando se comprime con gzip la base de datos previamente empaquetada. Gracias a "Ahmed El-Helw ahmedre@gmail.com" (3e6792, b/146911060)
Cambios en la API
Se agregó el objetivo faltante a la anotación
@ForeignKey
, lo que impide su uso fuera de la anotación@Entity
(Iced1e).El campo
mCallbacks
enRoomDatabase.java
ahora está oculto (d576cb, b/76109329).
Correcciones de errores
Actualización de la documentación de TypeConverters para aclarar que TypeConverters solo se puede usar a fin de convertir columnas o campos, pero no filas (I07c56, b/77307836).
Actualización de DaoProcessor para corregir el error del compilador en Dao con un supertipo genérico con "primitivas" de Kotlin (Ice6bb, b/160258066).
Actualización de la documentación sobre agregar o quitar métodos de observador para aclarar subprocesos (Ifd1d9, b/13159482)
Se solucionó un problema en el que Room validaba de forma incorrecta las tablas de FTS que declaraban su columna rowid (d62ebc, b/145858914).
Contribuciones externas
Soluciona los problemas relacionados con el uso de mayúsculas y minúsculas de la configuración regional del turco (5746e3, b/68159494).
Reemplaza el objeto
ConcurrentHashMap
enRoomDatabase
conCollections.synchronizedMap()
para evitar problemas en Android Lollipop (d1cfc7, b/162441855).Agrega una devolución de llamada onOpenPrepackagedDatabase cuando se copia una base de datos que se empaquetó previamente (I1ba74, b/148934423).
Versión 2.3.0-alpha02
22 de julio de 2020
Lanzamiento de androidx.room:room-*:2.3.0-alpha02
. La versión 2.3.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
- Compatibilidad con RxJava3: Ahora el elemento Room admite tipos de RxJava3. De manera similar al objeto RxJava2, puedes declarar métodos DAO cuyo tipo de datos que se muestra es Flowable, Single, Maybe y Completable. Además, hay un nuevo artefacto
androidx.room:room-rxjava3
disponible para admitir el elemento RxJava3. (b/152427884)
Cambios en la API
- Ahora se admite declarar un elemento
@TypeConverter
en la clase Object de Kotlin (b/151110764). - La opción para el procesamiento de anotaciones incrementales de Room ahora está ACTIVADA de forma predeterminada (b/112110217).
Versión 2.3.0-alpha01
10 de junio de 2020
Lanzamiento de androidx.room:room-*:2.3.0-alpha01
. La versión 2.3.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
Compatibilidad con Paging 3.0: Room ahora admitirá la generación de implementaciones para los métodos con anotaciones
@Query
cuyo tipo de datos que se muestra seaandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Cambios en la API
@RemoveUnusedColumns
es una anotación nueva y conveniente que hace que Room reescriba la proyección "*" en una búsqueda de modo que se quiten las columnas no utilizadas en el resultado.- La opción de procesador
room.expandProjection
ya no está disponible. Usa@RemoveUnusedColumns
como reemplazo para las búsquedas de optimización de Room con proyecciones destacadas. Ten en cuenta que@RemoveUnusedColumn
no reemplaza la solución al conflicto de columnas que ofrecíaroom.expandProjection
con respecto a los tipos de datos que se muestran y que contenían campos@Embedded
.
Correcciones de errores
- Se corrigió un error por el que Room no detectaba correctamente la versión de JDK usada para habilitar la adopción incremental del procesador de anotaciones. Gracias a Blaz Solar (me@blaz.solar) (b/155215201)
- Ahora Room incorpora su dependencia de ANTLR al procesador de anotaciones a fin de evitar conflictos de versiones con otros procesadores que también usan ANTLR (b/150106190).
Versión 2.2.6
Versión 2.2.6
16 de diciembre de 2020
Lanzamiento de androidx.room:room-*:2.2.6
. La versión 2.2.6 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema en el que Room inhabilitaba de manera incorrecta el procesamiento de anotaciones incrementales en versiones más recientes del JDK. (b/171387388)
Versión 2.2.5
Versión 2.2.5
18 de marzo de 2020
Lanzamiento de androidx.room:room-*:2.2.5
. La versión 2.2.5 contiene estas confirmaciones.
Correcciones de errores
- Crea directBootAware de
MultiInstanceInvalidationService
. Gracias a "Mygod contact-git@mygod.be" (b/148240967) - Se corrigió un error que causaba una falla cuando se habilitaba la invalidación de varias instancias y la base de datos contenía una entidad FTS (b/148969394).
- Se corrigió un error relacionado con la carga de las bibliotecas nativas de SQLite en el procesador de anotaciones de Room que causaba la falla del compilador debido a compilaciones paralelas (b/146217083).
Versión 2.2.4
Versión 2.2.4
19 de febrero de 2020
Lanzamiento de 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
y androidx.room:room-testing:2.2.4
. La versión 2.2.4 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error con la suspensión de transacciones en el que se interbloqueaban si la corrutina se cancelaba rápidamente antes de que comenzara la transacción (b/148181325).
- Se corrigió un error con el uso incorrecto de @Generated cuando se realizaban compilaciones con JDK 9 (b/146538330).
- Se corrigió un error en el que Room generaba código incorrecto cuando una interfaz DAO tenía una función concreta en Kotlin (b/146825845).
Versión 2.2.3
Versión 2.2.3
18 de diciembre de 2019
Lanzamiento de androidx.room:room-*:2.2.3
. La versión 2.2.3 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error en el que Room no podía validar una base de datos que no se había migrado y contenía un hash heredado con índices en su esquema (b/139306173).
Versión 2.2.2
Versión 2.2.2
20 de noviembre de 2019
Lanzamiento de androidx.room:room-*:2.2.2
. La versión 2.2.2 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error en el que la recopilación de una relación de uno a uno con más de 999 filas provocaba que Room muestre elementos relacionados nulos (b/143105450).
Versión 2.2.1
Versión 2.2.1
23 de octubre de 2019
Lanzamiento de androidx.room:room-*:2.2.1
. La versión 2.2.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error por el que Room advertía incorrectamente sobre
CURSOR_MISMATCH
con la opción de compiladorexpandProjection
activada (b/140759491). - Se agregó un mecanismo de reintento para administrar la biblioteca nativa faltante que se utiliza para verificar búsquedas durante el tiempo de compilación.
Versión 2.2.0
Versión 2.2.0
9 de octubre de 2019
Lanzamiento de androidx.room:room-*:2.2.0
. La versión 2.2.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.1.0
- Base de datos preempaquetada: Hay dos nuevas API disponibles en
RoomDatabase.Builder
para crear unaRoomDatabase
si ya hay un archivo de base de datos propagado.createFromAsset()
sirve cuando el archivo de la base de datos propagado previamente está en la carpeta de elementos del APK, mientras quecreateFromFile()
sirve cuando el archivo está en una ubicación arbitraria. El uso de estas API cambia el comportamiento de las migraciones destructivas de manera que, durante una migración alternativa, Room intentará volver a copiar la base de datos prepropagada si está disponible. De lo contrario, solo resguardará y volverá a crear todas las tablas (b/62185732). - Valores predeterminados del esquema:
@ColumnInfo
ahora tiene una nueva propiedaddefaultValue
que se puede usar para especificar el valor predeterminado de una columna. Los valores predeterminados son parte de un esquema de base de datos y, si se los especifica, se validarán durante las migraciones (b/64088772). - Relaciones de varios a varios:
@Relation
ahora tiene una nueva propiedadassociateBy
, que toma una nueva anotación@Junction
, que se usa para declarar una relación a través de una tabla de unión, también conocida como tabla asociativa (b/69201917). - Relaciones uno a uno: Se quitó la restricción en los campos POJO anotados con
@Relation
de tipoList
oSet
, lo que permite representar relaciones de valor único con eficacia (b/62905145). - Entidad de destino: Las anotaciones de DAO
@Insert
,@Update
y@Delete
ahora tienen una nueva propiedadtargetEntity
, que permite especificar la tabla de destino sobre la que tiene efecto el método DAO. Esto permite que los parámetros de esos métodos DAO sean POJO arbitrarios que se interpretarán como entidades parciales. En la práctica, esto permite inserciones, eliminaciones y actualizaciones parciales (b/127549506). - Flujo de corrutinas: Los métodos DAO
@Query
ahora pueden serFlow<T>
de tipo de datos que se muestra. El flujo que se muestre reemitirá un nuevo conjunto de valores si se invalidan las tablas de observación en la búsqueda. Declarar una función DAO con un tipo de datos que se muestraChannel<T>
es un error. En cambio, Room te incentiva a usarFlow
y, luego, utilizar las funciones cercanas para convertir elFlow
en unChannel
(b/130428884). - Procesador de anotaciones incrementales de Gradle: Room ahora es un procesador de anotaciones de aislamiento de Gradle, y la incrementabilidad se puede habilitar mediante la opción
room.incremental
del procesador. Para obtener más información, consulta Opciones del compilador de Room. Si encuentras algún problema, infórmanos. Planeamos habilitar la capacidad de aumento de forma predeterminada en una versión futura y estable. b/112110217 - Proyecciones desplegables: Se agregó una nueva opción experimental de compilador
room.expandProjection
, que hace que Room reescriba una búsqueda con una proyección destacada para contener solo las columnas en el tipo de datos que se muestra POJO. Por ejemplo, para un método DAO con@Query("SELECT * FROM Song")
que muestra un POJO llamadoSongIdAndTitle
con solo dos campos. Luego, Room reescribe la búsqueda aSELECT id, title FROM Song
, de modo de obtener el conjunto mínimo de columnas para satisfacer el tipo de datos que se muestra. Básicamente, esto elimina la advertenciaCURSOR_MISMATCH
que se presenta cuando la búsqueda muestra columnas adicionales que no coinciden con ningún campo en el tipo de POJO que se muestra.
Versión 2.2.0-rc01
5 de septiembre de 2019
Lanzamiento de androidx.room:room:2.2.0-rc01
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
No hay cambios públicos desde Room 2.2.0-beta01
.
Versión 2.2.0-beta01
22 de agosto de 2019
Lanzamiento de androidx.room:room-*:2.2.0-beta01
. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.
Correcciones de errores
- Se corrigió un error relacionado con una búsqueda de flujo de corrutina que dejaba de reemitir valores nuevos después de cierto tiempo (b/139175786).
- Se corrigió un error por el que Room no aceptaba un código hash de esquema heredado al abrir una base de datos que no se había migrado desde Room 1.0, lo que provocaba una falla de tiempo de ejecución debido a un esquema no válido (b/139306173).
Versión 2.2.0-alpha02
7 de agosto de 2019
Lanzamiento de androidx.room:room-*:2.2.0-alpha02
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Nuevas funciones
- Flujo de corrutinas: Los métodos DAO
@Query
ahora pueden serFlow<T>
de tipo de datos que se muestra. El flujo que se muestre reemitirá un nuevo conjunto de valores si se invalidan las tablas de observación en la búsqueda. Declarar una función DAO con un tipo de datos que se muestraChannel<T>
es un error. En cambio, Room te incentiva a usarFlow
y, luego, utilizar las funciones cercanas para convertir elFlow
en unChannel
(b/130428884). - Proyecciones desplegables: Se agregó una nueva opción experimental de compilador
room.expandProjection
, que hace que Room reescriba una búsqueda con una proyección destacada para contener solo las columnas en el tipo de datos que se muestra POJO. Por ejemplo, para un método DAO con@Query("SELECT * FROM Song")
que muestra un POJO llamadoSongIdAndTitle
con solo dos campos. Luego, Room reescribe la búsqueda aSELECT id, title FROM Song
, de modo de obtener el conjunto mínimo de columnas para satisfacer el tipo de datos que se muestra. Básicamente, esto elimina la advertenciaCURSOR_MISMATCH
que se presenta cuando la búsqueda muestra columnas adicionales que no coinciden con ningún campo en el tipo de POJO que se muestra. onDestructiveMigrate
es una nueva API de devolución de llamada que se agrega aRoomDatabase.Callback
para cuando Room migra una base de datos de manera destructiva (b/79962330).
Correcciones de errores
- Se corrigió un error relacionado con Room por el que se generaba un código incorrecto usando un método set de campo cuando el campo estaba protegido (b/136194628).
- Se corrigió un error que hacía que el InvalidationTracker arrojara una NPE en un segundo proceso cuando se habilitaba la invalidación de varias instancias y se cancelaba el servicio de invalidación (b/137454915).
- Se corrigió un error por el cual Room no identificaba correctamente el tipo de datos que se muestra de una función de suspensión heredada con anotación
@RawQuery
(b/137878827) - Se actualizó el código generado para
@Relation
cuando la clave relacionada es de tipo BLOB a fin de usar unByteBuffer
que sea comparable (b/137881998). - Se corrigió un error por el que Room reclamaba la falta de establecedores en los POJO utilizados como parámetros de entidad parciales de
@Insert
,@Update
, y@Delete
(b/138664463). - Se corrigió un error por el que Room reclamaba la falta de métodos get y set para una columna ignorada a través de
@Entity
cuando se utilizaba la clase de entidad en algunos métodos DAO (b/138238182). - Se corrigió un error por el que Room no convertía correctamente los argumentos de vinculación con nombre en argumentos posicionales, lo que causaba una excepción de tiempo de ejecución cuando se ejecutaba una búsqueda con parámetros reutilizados (b/137254857).
Versión 2.2.0-alpha01
10 de julio de 2019
Nuevas funciones
- Base de datos preempaquetada: Hay dos nuevas API disponibles en
RoomDatabase.Builder
para crear unaRoomDatabase
si ya hay un archivo de base de datos propagado.createFromAsset()
sirve cuando el archivo de la base de datos propagado previamente está en la carpeta de elementos del APK, mientras quecreateFromFile()
sirve cuando el archivo está en una ubicación arbitraria. El uso de estas API cambia el comportamiento de las migraciones destructivas de manera que, durante una migración alternativa, Room intentará volver a copiar la base de datos prepropagada si está disponible. De lo contrario, solo resguardará y volverá a crear todas las tablas (b/62185732). - Valores predeterminados del esquema:
@ColumnInfo
ahora tiene una nueva propiedaddefaultValue
que se puede usar para especificar el valor predeterminado de una columna. Los valores predeterminados son parte de un esquema de base de datos y, si se los especifica, se validarán durante las migraciones (b/64088772).Nota: Si el esquema de tu base de datos ya tiene valores predeterminados, como los que se agregaron mediante
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, y decides definir los valores predeterminados a través de@ColumnInfo
en las mismas columnas, es posible que debas proporcionar una migración para validar los valores predeterminados no contabilizados. Para obtener más información, consulta Migraciones de Room. - Relaciones de varios a varios:
@Relation
ahora tiene una nueva propiedadassociateBy
, que toma una nueva anotación@Junction
, que se usa para declarar una relación a través de una tabla de unión, también conocida como tabla asociativa (b/69201917). - Relaciones uno a uno: Se quitó la restricción en los campos POJO anotados con
@Relation
de tipoList
oSet
, lo que permite representar relaciones de valor único con eficacia (b/62905145). - Entidad de destino: Las anotaciones de DAO
@Insert
,@Update
y@Delete
ahora tienen una nueva propiedadtargetEntity
, que permite especificar la tabla de destino sobre la que tiene efecto el método DAO. Esto permite que los parámetros de esos métodos DAO sean POJO arbitrarios que se interpretarán como entidades parciales. En la práctica, esto permite inserciones, eliminaciones y actualizaciones parciales (b/127549506). - Procesador de anotaciones incrementales de Gradle: Room ahora es un procesador de anotaciones de aislamiento de Gradle, y la incrementabilidad se puede habilitar mediante la opción
room.incremental
del procesador. Para obtener más información, consulta Opciones del compilador de Room. Si encuentras algún problema, infórmanos. Planeamos habilitar la capacidad de aumento de forma predeterminada en una versión futura y estable. b/112110217
Correcciones de errores
- Room ya no propagará la
EmptySetResultException
al controlador de errores global cuando se haya eliminado la transmisión Rx antes de que se complete la búsqueda (b/130257475). - Se corrigió un error por el que Room mostraba un mensaje de error incorrecto cuando una función de DAO de suspensión con
@RawQuery
no tenía un tipo de datos que se muestra (b/134303897). - Room ya no generará adaptadores DAO con tipos sin procesar (b/135747255).
Versión 2.1.0
Versión 2.1.0
13 junio de 2019
Lanzamiento de Room 2.1.0 sin modificaciones desde 2.1.0-rc01
. Para conocer las confirmaciones incluidas en la versión, consulta este artículo.
Cambios importantes desde la versión 2.0.0
- FTS: Ahora Room admite entidades con una tabla de asignación FTS3 o FTS4. Ahora las clases con anotaciones
@Entity
también pueden tener anotaciones@Fts3
o@Fts4
a fin de declarar una clase con una tabla de asignación de búsqueda de texto completo. Para lograr una mayor personalización, hay opciones de FTS disponibles a través de los métodos de anotación. - Vistas: Ahora Room permite declarar una clase como una búsqueda almacenada, también conocida como vista, mediante la anotación
@DatabaseView
. - Corrutinas: Ahora los métodos DAO pueden ser funciones de suspensión. Incluye
room-ktx
en tus dependencias para aprovechar esta función. El artefacto ktx también proporciona la función de extensiónRoomDatabase.withTransaction
para realizar transacciones de bases de datos dentro de una corrutina. - Valor automático: Ahora Room permite declarar clases con anotaciones AutoValue como entidades y POJO. Ahora puedes declarar las anotaciones
@PrimaryKey
,@ColumnInfo
,@Embedded
y@Relation
de Room en métodos abstractos de la clase con anotaciones de valor. Ten en cuenta que estas anotaciones también deben ir acompañadas de@CopyAnnotations
para que Room pueda comprenderlas correctamente. - Compatibilidad con datos asíncronos adicionales: Los métodos DAO con anotaciones
@Insert
,@Delete
o@Update
, junto con@Query
que contengan instruccionesINSERT
,DELETE
oUPDATE
, ahora admiten tipos de resultado RxCompletable
,Single
,Maybe
, y el tipo de datos que se muestraListenableFuture
de Guava, y pueden ser funciones de suspensión. enableMultiInstanceInvalidation
es una API nueva enRoomDatabase.Builder
que sirve para habilitar la invalidación en varias instancias de RoomDatabase con el mismo archivo de base de datos.fallbackToDestructiveMigrationOnDowngrade
es una API nueva enRoomDatabase.Builder
que sirve para recrear automáticamente la base de datos si se cambia a una versión inferior.ignoredColumns
es una API nueva en la anotación@Entity
que se puede usar para crear una lista de campos ignorados según su nombre.- Room usará correctamente el constructor primario de Kotlin en las clases de datos, lo que evitará la necesidad de declarar las propiedades como
vars
.
Versión 2.1.0-rc01
29 de mayo de 2019
Correcciones de errores
- Se corrigió un error de inicialización de Room que podía ocurrir debido a una configuración de temp_store ya establecida (b/132602198).
- Se corrigió una advertencia de uso de comillas dobles para usuarios con SQLite 3.27.0 y versiones posteriores (b/131712640).
- Se corrigió un error en el que InvalidationTracker causaba una falla cuando se producían varias verificaciones de invalidación en paralelo (b/133457594).
Versión 2.1.0-beta01
7 de mayo de 2019
Lanzamiento de androidx.room 2.1.0-beta01
sin modificaciones desde 2.1.0-alpha07. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Versión 2.1.0-alpha07
25 de abril de 2019
Cambios de comportamiento/API
- Se modificó la función de extensión
RoomDatabase.withTransaction
de modo que ya no tome un bloqueo de funciones con unCoroutineScope
como receptor. De esta manera, se evita omitir el wrappercoroutineScope { }
adicional necesario para ejecutar las acciones en el bloqueo de transacciones de manera simultánea.
Correcciones de errores
- Se corrigió un error por el que Room no podía encontrar una coincidencia con un TypeConverter para una función de DAO de Kotlin que contenía un parámetro de tipo Collection (b/122066791).
Versión 2.1.0-alpha06
22 de marzo de 2019
Cambios de comportamiento/API
- Ahora se serializan las búsquedas de transacciones asíncronas, de modo que Room no usará más de un subproceso para ejecutar transacciones de la base de datos.
Se agregó
RoomDatabase.Builder.setTransactionExecutor(Executor)
para permitir la configuración del ejecutor que se debe utilizar en las transacciones. RoomDatabase.runInTransaction(Callable)
ya no unirá las excepciones marcadas en RuntimeExceptions (b/128623748).
Correcciones de errores
- Se corrigió un error en el que el seguimiento de invalidaciones dejaba de observar una tabla de contenido si se agregaban observadores tanto para la tabla de contenido como para una tabla FTS de contenido externo (b/128508917).
- Se actualizó la gramática de SQLite de Room para que coincida con SQLite 3.24.0 (b/110883668).
Versión 2.1.0-alpha05
13 de marzo de 2019
Nuevas funciones
- La función de extensión
RoomDatabase.withTransaction
te permite realizar transacciones de bases de datos de forma segura dentro de una corrutina. Las funciones de extensiones de Room, junto con la compatibilidad con corrutinas, están disponibles en el artefactoroom-ktx
. - Los métodos DAO no abstractos con anotaciones
@Transaction
ahora pueden ser funciones de suspensión (b/120241587).
Cambios de comportamiento/API
- Se cambió el nombre del artefacto
room-coroutines
porroom-ktx
para seguir la misma nomenclatura que otros artefactos androidx. - Los objetos
beginTransaction
,setTransactionSuccessful
yendTransaction
enRoomDatabase
dejaron de estar disponibles, y se los reemplazó porrunInTransaction
y la función de extensiónroom-ktx
withTransaction
.
Correcciones de errores
- Se corrigió un error por el que se soltaban los argumentos del tokenizador si el que se usaba era SIMPLE. b/125427014
- Se corrigió un error por el que Room no identificaba correctamente las funciones de suspensión con parámetros cuyo tipo era una clase interna (b/123767877).
- Se corrigió un error por el que el método
@Query
diferido de DAO con instruccionesINSERT
,UPDATE
oDELETE
preparaba con anticipación la búsqueda en el subproceso principal (b/123695593). - Se corrigieron varios errores por los que Room generaba códigos incorrectos para algunas funciones de suspensión (b/123466702 y b/123457323).
- Se corrigió un error por el que no se suprimía correctamente el uso obsoleto de los métodos en el código generado. b/117602586
- Se actualizó la dependencia de Room de androidx.sqlite a 1.0.2, que contiene correcciones a fin de controlar de forma correcta las bases de datos dañadas. b/124476912
Errores conocidos
- Room 2.1.0-alpha05 depende del artefacto
kotlinx-metadata-jvm
que no está disponible actualmente en Maven Central (KT-27991). Puedes resolver esta dependencia si agregasmaven { url "https://kotlin.bintray.com/kotlinx/" }
a los repositorios de tu proyecto.
Versión 2.1.0-alpha04
25 de enero de 2019
Nuevas funciones
- Los métodos DAO con anotaciones
@Query
que contienen instruccionesINSERT
,UPDATE
oDELETE
ahora pueden mostrar tipos asíncronosSingle
,Mayble
,Completable
yListenableFuture
. Además, también pueden ser funciones de suspensión. b/120227284
Cambios de comportamiento/API
- Room ahora mostrará un error si un método DAO no abstracto con anotaciones
@Transaction
muestra un tipo asíncrono comoSingle
,Mayble
,Completable
,LiveData
oListenableFuture
. Dado que las transacciones están confinadas en subprocesos, por el momento, es imposible que Room comience y finalice una transacción en torno a una función que puede realizar búsquedas en diferentes subprocesos (b/120109336). OnConflictStrategy.FAIL
yOnConflictStrategy.ROLLBACK
ahora son@Deprecated
, ya que no se comportan según lo esperado con las vinculaciones actuales SQLite de Android (b/117266738).
Correcciones de errores
- Se corrigió un error por el que Room no usaba correctamente el TypeConverter de un tipo de resultado si el método DAO era una función de suspensión. b/122988159
- Se corrigió un error por el que Room identificaba de manera incorrecta las funciones de suspensión heredadas como de no suspensión (b/122902595).
- Se corrigió un error por el que Room generaba códigos incorrectos cuando un campo
@Embedded
estaba en una clase superior y se usaba en varias clases secundarias (b/121099048). - Se solucionó un problema por el que se bloqueaba la base de datos al invocar funciones de suspensión de DAO entre
beginTransaction()
yendTransaction()
(b/120854786).
Versión 2.1.0-alpha03
4 de diciembre de 2018
Cambios en la API
- Ahora el FTS
tokenizer
en@Fts3
/@Fts4
lleva una cadena en lugar de una enumeración. Esto permite que Room use tokenizadores personalizados. Los tokenizadores integrados todavía están definidos enFtsOptions
como constantes de string. b/119234881
Nuevas funciones
- Corrutinas: Ahora los métodos DAO pueden ser funciones de suspensión. Para admitir las funciones de suspensión en Room, se lanzó un nuevo artefacto,
room-coroutines
. b/69474692 - Los métodos DAO con anotaciones
@Insert
,@Delete
o@Update
ahora admitenListenableFuture
como tipo de datos que se muestra. b/119418331
Correcciones de errores
- Se solucionó un error por el que Room intentaba incorrectamente encontrar un constructor con columnas en la propiedad
ignoredColumns
de@Entity
. b/119830714 - Se solucionó un error en el que Room no identificaba parámetros del método DAO como finales en su implementación generada. b/118015483
- Se solucionó un error en el que el procesador de Room fallaba al informar un error en una búsqueda con símbolos especiales. b/119520136
- Se corrigió un error por el que Room rechazaba varias implementaciones de
Collection
como argumentos de una expresiónIN
. b/119884035 - Se corrigió un error en el que los LiveData mostrados por Room recibían elementos no utilizados recopilados cuando se observaban de manera indefinida, lo que ocasionaba que ya no emitieran datos nuevos. b/74477406
- Se actualizó el bloqueo de cierre de
RoomDatabase
a fin de reducir la contención de bloqueo (b/117900450).
Versión 2.1.0-alpha02
30 de octubre de 2018
Nuevas funciones
- Se agregó compatibilidad para hacer referencia a
@DatabaseView
en@Relation
. b/117680932
Correcciones de errores
- Se corrigió un error en el que Room realizaba operaciones de I/O en el disco en el proceso principal al suscribirse y desechar un tipo de resultado Rx b/117201279
- Se corrigió un error en el que Room no encontraba un convertidor de tipo apropiado para un campo en una clase de entidad de Kotlin. b/111404868
- Se corrigió un error en el que Room generaba un código incorrecto para una implementación de interfaz
DAO
que incluye un método predeterminado de Kotlin sin argumentos. b/117527454 - Se actualizó el analizador de gramática de SQLite de Room y se corrigió un error de rendimiento que prolongaba los tiempos de compilación (b/117401230).
Versión 2.1.0-alpha01
8 de octubre de 2018
Nuevas funciones
- FTS: Ahora Room admite entidades con una tabla de asignación FTS3 o FTS4. Ahora las clases con anotaciones
@Entity
también pueden tener anotaciones@Fts3
o@Fts4
a fin de declarar una clase con una tabla de mapeo de búsqueda en el texto completo. Las opciones de FTS para mayor personalización están disponibles mediante los métodos de la anotación. b/62356416 - Vistas: Ahora Room permite declarar una clase como una consulta almacenada, también conocida como vista mediante la anotación @DatabaseView. b/67033276
- Valor automático: Ahora Room permite declarar clases con anotaciones AutoValue como entidades y POJO. Ahora puedes declarar las anotaciones
@PrimaryKey
,@ColumnInfo
,@Embedded
y@Relation
de Room en métodos abstractos de la clase con anotaciones de valor. Ten en cuenta que estas anotaciones deben estar acompañadas de@CopyAnnotations
para que Room pueda entenderlas correctamente. b/62408420 - Compatibilidad adicional con tipos de datos que se muestran Rx: Los métodos DAO con anotaciones
@Insert
,@Delete
o@Update
ahora admiten tipos de datos que se muestran RxCompletable
,Single<T>
yMaybe<T>
. b/63317956 - Tipos con
@Relation
que no cambian: Antes, Room requería que los campos con anotaciones@Relation
pudieran configurarse, pero ahora pueden ser parámetros de constructor. enableMultiInstanceInvalidation
: Es una API nueva enRoomDatabase.Builder
que sirve para habilitar la invalidación en varias instancias de RoomDatabase con el mismo archivo de base de datos. Este mecanismo de invalidación de varias instancias también funciona con distintos procesos. b/62334005fallbackToDestructiveMigrationOnDowngrade
: Es una API nueva enRoomDatabase.Builder
que sirve para recrear automáticamente la base de datos si se cambia a una versión inferior. b/110416954ignoredColumns
: Es una API nueva en la anotación@Entity
que se puede usar para crear una lista de campos ignorados según su nombre. Sirve para ignorar campos heredados en una entidad. b/63522075
Cambios de comportamiento/API
- Ahora
mCallback
ymDatabase
enRoomDatabase
son@Deprecated
y se quitarán en la próxima versión de Room. b/76109329
Correcciones de errores
- Se corrigieron dos errores en los que Room no se recuperaba correctamente de una base de datos dañada o una migración incorrecta durante la inicialización. b/111504749 y b/111519144
- Ahora Room usará de forma correcta el constructor principal de Kotlin en clases de datos, lo que evita la necesidad de declarar los campos como
vars
(b/105769985).
Versión 2.0.0
Versión 2.0.0
1 de octubre de 2018
Lanzamiento de androidx.room 2.0.0
sin cambios desde la versión 2.0.0-rc01.
Versión 2.0.0-rc01
20 de septiembre de 2018
Lanzamiento de androidx.room 2.0.0-rc01
sin modificaciones desde la versión 2.0.0-beta01.
Versión 2.0.0-beta01
2 de julio de 2018
Cambios de comportamiento/API
- Se agregó
RoomDatabase.Builder.setQueryExecutor()
para permitir la personalización del lugar en el que se ejecutan las búsquedas. - Se agregó compatibilidad con RxJava2
Observable
. - Ahora las implementaciones generadas de DAO y Database son definitivas.
Correcciones de errores
- Especifica el nombre de clase/campo en el error "no se puede encontrar un captador para el campo". b/73334503
- Se corrigió la compatibilidad de versiones anteriores de RoomOpenHelper con versiones anteriores de Room. b/110197391
Dependencias anteriores a AndroidX
Para las versiones de Room anteriores a AndroidX, incluye estas dependencias:
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"
}
Versión 1.1.1
Versión 1.1.1
19 de junio de 2018
Room 1.1.1
es idéntico a Room 1.1.1-rc1
.
Versión 1.1.1-rc1
16 de mayo de 2018
Recomendamos utilizar Room 1.1.1-rc1
en lugar de 1.1.0
si usas migraciones.
Se solucionó un error en el que Room no administraba correctamente la inicialización posterior a la migración (b/79362399).
Versión 1.1.0
Versión 1.1.0-beta3
19 de abril de 2018
Correcciones de errores
- Se corrigió un error de compilación que ocurría cuando un POJO de Kotlin hacía referencia a una entidad de relación que se había definido en Java (b/78199923).
Versión 1.1.0-beta2
5 de abril de 2018
Correcciones de errores
Se corrigió un error crítico en las implementaciones
Single
yMaybe
de Room Rx, en el que se reciclaba la búsqueda antes de tiempo, lo que ocasionaba problemas si agregabas más de un observador a las instancias deSingle
oMaybe
que se habían mostrado (b/76031240).[RoomDatabase.ImageAllTables][ref-clearAllTables] no ejecutará
VACUUM
en la base de datos si se invoca dentro de una transacción (b/77235565).
Versión 1.1.0-beta1
21 de marzo de 2018
Cambios en la API
- En función de los comentarios de revisión de la API,
@RawQuery
ya no acepta que se pase unaString
como parámetro de búsqueda. Debes usar [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (Consulta [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] para crear fácilmente una instancia de [SupportSQLiteQuery][ref-SupportSQLiteQuery] con compatibilidad con argumentos). - El método [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] de RoomDatabase.Builder ahora acepta
vararg int
en lugar devararg Integer
.
Correcciones de errores
- Ahora [RoomDatabase.clearAllTables][ref-clearAllTables] intenta mostrar espacio al sistema operativo al configurar un punto de control de WAL y realizar un
VACUUM
de la base de datos. - Ahora [
@RawQuery
][ref-RawQuery] acepta cualquier POJO de la propiedadobservedEntities
, siempre y cuando tenga referencias a una o más entidades a través de sus camposEmbedded
oRelation
(b/74041772). - Paging: Ahora la implementación DataSource de Room administra correctamente dependencias con varias tablas (como relaciones y uniones). Anteriormente, fallaban al activar resultados nuevos o hacer una compilación. b/74128314
Versión 1.1.0-alpha1
22 de enero de 2018
Nuevas funciones
RawQuery
: esta API nueva permite que los métodos@Dao
reciban a SQL como un parámetro de búsqueda. b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: esta API nueva enRoomDatabase.Builder
permite controlar de manera más detallada desde qué versiones de inicio se permiten las migraciones destructivas (en comparación con fallbackToDestructiveMigration). b/64989640- Ahora Room solo es compatible con las API de Paging más recientes (alpha-4+), de manera que ya no admite
LivePagedListProvider
, que dejó de estar disponible. Para usar la nueva versión Alfa de Room, debes utilizar paginación dealpha-4
o versiones posteriores y cambiar deLivePagedListProvider
aLivePagedListBuilder
, si todavía no lo hiciste.
Correcciones de errores
- Compatibilidad mejorada para tipos Kotlin Kapt. b/69164099
- El orden de los campos ya no invalida el esquema (b/64290754).