Room

La biblioteca de persistencias Room brinda una capa de abstracción para SQLite que permite acceder a la base de datos sin problemas y, al mismo tiempo, aprovechar toda la potencia de SQLite.

Actualización más reciente Versión estable actual Próxima versión potencial Versión Beta Versión Alfa
18 de marzo de 2020 2.2.5 - - -

Cómo declarar dependencias

Para agregar una dependencia en Room, debes agregar el repositorio Maven de Google a tu proyecto. Lee 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:

    dependencies {
      def room_version = "2.2.5"

      implementation "androidx.room:room-runtime:$room_version"
      annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

      // optional - Kotlin Extensions and Coroutines support for Room
      implementation "androidx.room:room-ktx:$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"

      // 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 sobre 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 incrementales 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 problema existente, haz clic en el botón de estrella.

Cómo crear un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

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 cuando es cargaban las bibliotecas nativas de SQLite en el procesador de anotaciones de Room que causaban 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 compilaba 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 cuando se recopilaba una relación de uno a uno con más de 999 filas, se 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 intentaba incorrectamente advertir sobre CURSOR_MISMATCH con la opción de compilador expandProjection 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 una RoomDatabase 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 que createFromFile() 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 propiedad defaultValue 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 lo especifica, se validarán durante las migraciones. b/64088772
  • Relaciones de varios a varios: @Relation ahora tiene una nueva propiedad associateBy, 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 tipo List o Set, 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 propiedad targetEntity, 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 ser Flow<T> del 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 muestra Channel<T> es un error. En cambio, Room te incentiva a usar Flow y, luego, utilizar las funciones cercanas para convertir el Flow en un Channel. 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 llamado SongIdAndTitle con solo dos campos. Luego, Room reescribe la búsqueda a SELECT 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 advertencia CURSOR_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 artículo.

Correcciones de errores

  • Se corrigió un error relacionado con una búsqueda de flujo de corrutina que dejaba de reemitir nuevos valores 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 ser Flow<T> del 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 muestra Channel<T> es un error. En cambio, Room te incentiva a usar Flow y, luego, utilizar las funciones cercanas para convertir el Flow en un Channel. 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 llamado SongIdAndTitle con solo dos campos. Luego, Room reescribe la búsqueda a SELECT 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 advertencia CURSOR_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 a RoomDatabase.Callback para cuando Room migra de manera destructiva una base de datos. 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 como configurador 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 un ByteBuffer 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 capturadores y establecedores 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 una RoomDatabase 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 que createFromFile() 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 propiedad defaultValue 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 lo 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 propiedad associateBy, 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 tipo List o Set, 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 propiedad targetEntity, 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 de una consulta. 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 resultado. 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ón RoomDatabase.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 instrucciones INSERT, DELETE o UPDATE, ahora admiten tipos de resultado Rx Completable, Single, Maybe, y el tipo de datos que se muestra ListenableFuture de Guava, y pueden ser funciones de suspensión.
  • enableMultiInstanceInvalidation es una API nueva en RoomDatabase.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 en RoomDatabase.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 un CoroutineScope como receptor. De esta manera, se evita omitir el wrapper coroutineScope { } 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 artefacto room-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 por room-ktx para seguir la misma nomenclatura que otros artefactos androidx.
  • Los objetos beginTransaction, setTransactionSuccessful y endTransaction en RoomDatabase dejaron de estar disponibles, y se los reemplazó por runInTransaction y la función de extensión room-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 instrucciones INSERT, UPDATE o DELETE 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 agregas maven { 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 instrucciones INSERT, UPDATE o DELETE ahora pueden mostrar tipos asíncronos Single, Mayble, Completable y ListenableFuture. 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 como Single, Mayble, Completable, LiveData o ListenableFuture. 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 y OnConflictStrategy.ROLLBACK ahora son @Deprecated ya que no se comportan según lo esperado con las actuales vinculaciones 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 datos que se muestra 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 producía un interbloqueo de la base de datos al invocar funciones de suspensión de DAO entre beginTransaction() y endTransaction(). 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 en FtsOptions 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 admiten ListenableFuture 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 cuando informaba un error en una consulta con símbolos especiales. b/119520136
  • Se corrigió un error por el que Room rechazaba varias implementaciones de Collection como argumentos de una expresión IN. b/119884035
  • Se corrigió un error en el que los LiveData mostrados por Room recibían residuos recopilados cuando se los observaba 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 competencia 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 mapeo 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 con tipos de resultado Rx adicionales: Los métodos DAO con anotaciones @Insert, @Delete o @Update ahora admiten tipos de resultado Rx Completable, Single<T> y Maybe<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 en RoomDatabase.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/62334005
  • fallbackToDestructiveMigrationOnDowngrade: Es una API nueva en RoomDatabase.Builder que sirve para recrear automáticamente la base de datos si se cambia a una versión inferior. b/110416954
  • 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. Sirve para ignorar campos heredados en una entidad. b/63522075

Cambios de comportamiento/API

  • Ahora mCallback y mDatabase en RoomDatabase 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 retrocompatibilidad de versiones 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 y Maybe 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 de Single o Maybe 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 una String 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 de vararg 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 propiedad observedEntities, siempre y cuando tenga referencias a una o más entidades a través de sus campos Embedded o Relation. 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/71458963
  • fallBackToDestructiveMigrationsFrom: Esta API nueva en RoomDatabase.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 de alpha-4 o versiones posteriores y cambiar de LivePagedListProvider a LivePagedListBuilder, 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