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 Versión potencial Versión beta Versión alfa
29 de noviembre de 2023 2.6.1 - - -

Cómo declarar dependencias

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

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")
}

Para obtener información sobre el uso del complemento KAPT, consulta la documentación de KAPT.

Para obtener información sobre el uso del complemento KSP, consulta la documentación de inicio rápido de KSP.

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.

De manera opcional, para las bibliotecas que no sean de Android (es decir, módulos de Gradle únicos de Java o Kotlin), puedes contar con androidx.room:room-common para usar las anotaciones de Room.

Cómo configurar las opciones del compilador

Room tiene las siguientes opciones de procesador de anotaciones.

room.schemaLocation directory
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 boolean
Habilita el procesador de anotaciones incrementales de Gradle. El valor predeterminado es true.
room.generateKotlin boolean
Genera archivos fuente de Kotlin en lugar de Java. Requiere KSP. El valor predeterminado es false. Consulta las notas de la versión 2.6.0 para obtener más detalles.

Usa el complemento de Gradle de Room

Con Room 2.6.0 y versiones posteriores, puedes usar el complemento de Gradle de Room para configurar opciones para el compilador de Room. El complemento configura el proyecto de modo que los esquemas generados (que son un resultado de las tareas de compilación y se consumen para las migraciones automáticas) se configuren correctamente para tener compilaciones reproducibles y que se pueden almacenar en caché.

Para agregar el complemento, define el complemento y su versión en el archivo de compilación de Gradle de nivel superior.

Groovy

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

Kotlin

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

En el archivo de compilación de Gradle a nivel del módulo, aplica el complemento y usa la extensión room.

Groovy

plugins {
    id 'androidx.room'
}

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

Kotlin

plugins {
    id("androidx.room")
}

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

Se requiere configurar un schemaDirectory cuando se usa el complemento de Gradle de Room. De esta manera, se configurará el compilador de Room, las diversas tareas de compilación y sus backends (javac, KAPT y KSP) para generar archivos de esquema en carpetas con diferentes tipos, por ejemplo, schemas/flavorOneDebug/com.package.MyDatabase/1.json. Estos archivos se deben registrar en el repositorio para usarlos en la validación y las migraciones automáticas.

Algunas opciones no se pueden configurar en todas las versiones del complemento de Gradle de Room, aunque son compatibles con el compilador de Room. En la siguiente tabla, se enumera cada opción y se muestra la versión del complemento de Gradle de Room que agregó compatibilidad para configurar esa opción con la extensión room. Si tu versión es anterior, o si la opción aún no es compatible, puedes usar las opciones del procesador de anotaciones en su lugar.

Opción Desde la versión
room.schemaLocation (obligatorio) 2.6.0
room.incremental -
room.generateKotlin -

Cómo usar las opciones del procesador de anotaciones

Si no usas el complemento de Gradle para Room o si la opción que deseas no es compatible con tu versión del complemento, puedes configurar Room con las opciones del procesador de anotaciones, como se describe en Cómo agregar dependencias de compilación. La forma en que especificas las opciones de anotación depende de si usas KSP o KAPT para 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...
                )
            }
        }
    }
}

Como room.schemaLocation es un directorio y no un tipo primitivo, se debe usar un CommandLineArgumentsProvider cuando se agrega esta opción, de modo que Gradle esté al tanto de este directorio cuando se realicen comprobaciones actualizadas. En Cómo migrar tu base de datos de Room, se muestra una implementación completa de CommandLineArgumentsProvider que proporciona la ubicación del esquema.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.

Crear un error nuevo

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

Versión 2.6

Versión 2.6.1

29 de noviembre de 2023

Lanzamiento de androidx.room:room-*:2.6.1. La versión 2.6.1 contiene estas confirmaciones.

Correcciones de errores

  • Se resolvió un problema en el código generado en el que el valor predeterminado para las columnas dobles en EntityCursorConverter se establecía en 0 en lugar de 0.0 También se incluyó una posible solución para un caso límite similar para las columnas de tipo de número de punto flotante. (Id75f5, b/304584179).
  • Las excepciones arrojadas desde cargas de PagingSource ahora se propagarán como un LoadStateUpdate de LoadResult.Error que contiene el Throwable. Este estado de error es observable a través de PagingDataAdapter.loadStateFlow(Views) o LazyPagingItems.loadState(Compose). Ten en cuenta que esto marca un cambio de comportamiento en el que, en el pasado, los errores de carga aparecerán como una excepción arrojada por el método DAO que activó la carga. (I93887, b/302708983).

Versión 2.6.0

18 de octubre de 2023

Lanzamiento de androidx.room:room-*:2.6.0. La versión 2.6.0 contiene estas confirmaciones.

Cambios importantes desde la versión 2.5.0

  • La opción para habilitar la generación de código Kotlin (o "Kotlin CodeGen") ahora está disponible en Room KSP. (4297ec0). Para activar CodeGen de Kotlin en Room, agrega el nombre de opción room.generateKotlin a las opciones de tu procesador para KSP. Para obtener más detalles sobre cómo pasar opciones de procesador para KSP, consulta la documentación de KSP.

Nota: Cuando usas Kotlin CodeGen, es importante tener en cuenta que se agregaron restricciones adicionales. No se permiten las propiedades abstractas como métodos get de DAO o consultas DAO en Kotlin CodeGen. En cambio, se espera que se reescriban como funciones para evitar la falsa noción de que el valor de propiedad es inmutable y tiene un resultado almacenado fijo. Otra restricción que se agregó es que ya no se permiten los tipos de datos que muestran la colección anulable en Room para CodeGen de Kotlin.

Advertencia: Es posible que tus proyectos sean más estrictos en términos de nulabilidad cuando uses Kotlin CodeGen. En Kotlin CodeGen, la nulabilidad de los argumentos de tipo es importante; en Java, esto se ignora principalmente. Por ejemplo, supongamos que tienes un tipo de datos que se muestra “Flow<foo\>” y que la tabla está vacía. En Java CodeGen, esto no causará problemas, pero en Kotlin CodeGen, se mostrará un error. Para evitar esto, deberás usar `Flow<foo?\>`, suponiendo que se emite un valor nulo. ¿</foo?\></foo\>

  • Se agregó el artefacto nuevo para el complemento de Gradle de Room a Room con el ID androidx.room, lo que resuelve varios problemas existentes de Room relacionados con la entrada y salida de esquemas a través de las opciones del procesador de anotaciones de Gradle. Para obtener más información, consulta las notas de la versión de Room 2.6.0-alpha02.
  • Las clases de valor en entidades de Room ahora son compatibles con KSP. (4194095).
  • Los tipos de datos que se muestran de mapas anidados en funciones DAO ahora son compatibles con Room. (I13f48, 203008711).

Versión 2.6.0-rc01

20 de septiembre de 2023

Lanzamiento de androidx.room:room-*:2.6.0-rc01. La versión 2.6.0-rc01 contiene estas confirmaciones.

Versión 2.6.0-beta01

23 de agosto de 2023

Lanzamiento de androidx.room:room-*:2.6.0-beta01. La versión 2.6.0-beta01 contiene estas confirmaciones.

Correcciones de errores

  • Si se administra la excepción SQLite de caso especial durante la inserción y actualización que se encuentra cuando se arroja la excepción 2067 SQLITE_CONSTRAINT_UNIQUE durante una inserción, esta acción debería realizar una actualización. (If2849, b/243039555).

Versión 2.6.0-alpha03

9 de agosto de 2023

Lanzamiento de androidx.room:room-*:2.6.0-alpha03. La versión 2.6.0-alpha03 contiene estas confirmaciones.

Nuevas funciones

  • Los tipos de datos que se muestran de mapas anidados en funciones DAO ahora son compatibles con Room. (I13f48, 203008711).

Cambios en la API

  • Se creó una nueva anotación de tipo llamada @MapColumn para reemplazar @MapInfo, que dejó de estar disponible. Para cada nombre de columna (keyColumnName, valueColumnName o ambos) proporcionados en una anotación @MapInfo, deberás declarar una anotación @MapColumn solo con columnName y usar la anotación en el argumento de tipo específico al que se hace referencia (la clave o el valor del mapa) en el tipo de datos que se muestra de la función DAO. Esto se debe a que la anotación @MapColumn se usa directamente en el argumento de tipo dentro del tipo de datos que se muestra de una función DAO, en lugar de hacerlo en la función como @MapInfo. Para obtener más información, consulta la documentación de @MapColumn. (Ib0305, b/203008711).
  • Se actualizaron los archivos de la API para anotar la supresión de compatibilidad (I8e87a, b/287516207).
  • Se actualizaron las APIs del complemento de Gradle de Room para que no siempre requieran configuraciones por variante. Esto significa que el complemento puede aceptar una ubicación global para todas las variantes sin crear varios directorios, lo que permite migraciones más fluidas, pero también es lo suficientemente flexible como para configurar manualmente variantes o esquemas de tipo de compilación sin perder los beneficios del complemento (compilaciones reproducibles y que se pueden almacenar en caché). (I09d6f, b/278266663).

Correcciones de errores

  • Se corrigió una potencial vulnerabilidad de fuga de memoria en QueryInterceptorStatement. (I193d1).
  • Se corrigió el comportamiento incorrecto en la función QueryInterceptorDatabase execSQL(). (Iefdc8).

Versión 2.6.0-alpha02

21 de junio de 2023

Lanzamiento de androidx.room:room-*:2.6.0-alpha02. La versión 2.6.0-alpha02 contiene estas confirmaciones.

Complemento de Gradle de Room

Esta nueva versión incluye un artefacto nuevo para el complemento de Gradle de Room con el ID androidx.room, que resuelve varios problemas existentes en Room relacionados con la entrada y la salida de esquemas a través de las opciones del procesador de anotaciones de Gradle. El complemento de Gradle para Room configura el proyecto de modo que los esquemas generados que se consumen para las migraciones automáticas y que son el resultado de las tareas de compilación se configuren correctamente para tener compilaciones reproducibles y que se pueden almacenar en caché. El complemento ofrece un DSL para configurar la ubicación del esquema base:

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

Luego, el complemento configurará el compilador de Room, las distintas tareas de compilación y sus backends (javac, KAPT y KSP) para generar archivos de esquema en carpetas con diferentes tipos, es decir, schemas/flavorOneDebug/com.package.MyDatabase/1.json. Como siempre, estos archivos son registros en el repositorio que se usarán para la validación y las migraciones automáticas. Cuando se realiza la migración para usar el complemento en lugar de las opciones del procesador de anotaciones, los archivos de esquema existentes se deben copiar en los directorios de tipos generados que creó el complemento. Se trata de una operación de migración única que debe realizarse de forma manual. La documentación del esquema en developers.android.com se actualizará en el futuro una vez que se aborden los comentarios y el complemento alcance una estabilidad. Vuelve a intentarlo.

Cambios en la API

  • Se definió RoomDatabase.QueryCallback como una interfaz funcional para permitir el uso de conversiones de SAM. (Iab8ea, b/281008549).

Correcciones de errores

  • Se resolvió el problema que se producía cuando se creaba una instancia de la base de datos en Robolectric después de la migración de las fuentes de Room de Java a Kotlin (Ic053c, b/274924903).

Versión 2.6.0-alpha01

22 de marzo de 2023

Lanzamiento de androidx.room:room-*:2.6.0-alpha01. La versión 2.6.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Compatibilidad con clases de valor en Room para KSP. Ahora Room admite clases de valor en entidades. (4194095).
  • Ahora se puede habilitar la generación de código Kotlin(o "Kotlin CodeGen") en Room (4297ec0). Para activar CodeGen de Kotlin en Room, agrega el nombre de opción room.generateKotlin a las opciones de tu procesador para KSP. Para obtener más detalles sobre cómo pasar opciones de procesador para KSP, consulta la documentación de KSP.

Nota: Cuando usas Kotlin CodeGen, es importante tener en cuenta que se agregaron restricciones adicionales. No se permiten las propiedades abstractas como métodos get de DAO o consultas DAO en Kotlin CodeGen. En cambio, se espera que se reescriban como funciones para evitar la falsa noción de que el valor de propiedad es inmutable y tiene un resultado almacenado fijo. Otra restricción que se agregó es que ya no se permiten los tipos de datos que muestran la colección anulable en Room para CodeGen de Kotlin.

Advertencia: Es posible que tus proyectos sean más estrictos en términos de nulabilidad cuando uses Kotlin CodeGen. En Kotlin CodeGen, la nulabilidad de los argumentos de tipo es importante; en Java, esto se ignora principalmente. Por ejemplo, supongamos que tienes un tipo de datos que se muestra “Flow<foo\>” y que la tabla está vacía. En Java CodeGen, esto no causará problemas, pero en Kotlin CodeGen, se mostrará un error. Para evitar esto, deberás usar `Flow<foo?\>`, suponiendo que se emite un valor nulo. ¿</foo?\></foo\>

Cambios en la API

  • Protección contra el uso sin sentido de colecciones anulables en tipos de datos que se muestran del método DAO (I777dc, b/253271782, b/259426907).
  • Agrega una API para crear un flujo que emita cambios del seguimiento de invalidación. La API es útil para crear flujos que deben reaccionar a los cambios de la base de datos. (I8c790, b/252899305).

Correcciones de errores

  • No permiten propiedades abstractas como métodos get de DAO o consultas DAO en Codegen Kotlin. En su lugar, se deben reescribir como funciones para evitar la falsa noción de que el valor de propiedad es inmutable y tiene un resultado almacenado fijo. (If6a13, b/127483380, b/257967987).

Versión 2.5.2

Versión 2.5.2

21 de junio de 2023

Lanzamiento de androidx.room:room-*:2.5.2. La versión 2.5.2 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un problema de incompatibilidad con kotlinx-metadata-jvm. (386d5c).
  • Se solucionó un problema que provocaba que Room mostrara un error cuando se usaba en una prueba de Robolectric (f79bea, b/274924903).

Versión 2.5.1

Versión 2.5.1

22 de marzo de 2023

Lanzamiento de androidx.room:room-*:2.5.1. La versión 2.5.1 contiene estas confirmaciones.

Correcciones de errores

  • Evita verificar el directorio superior de la base de datos en FrameworkSQLiteHelper si la base de datos ya está abierta. (5de86b8).
  • Usa una verificación isOpenInternal cuando compruebes si la base de datos ya está abierta. (e91fb35).
  • Ya está disponible el mejor manejo del caso de reentrante en el elemento acquireTransactionThread() de Room. (219f98b). Durante una transacción suspendida, Room usa un subproceso del ejecutor de la transacción, inicia un bucle de eventos en él y le envía operaciones de base de datos suspendidas para que se encapsulen en la corrutina de la transacción. Por lo general, se espera que el subproceso de transacción sea diferente del que inicia la transacción, pero en algunos casos son iguales. Para manejar estos casos de reentrantes, se refactorizó withTransaction() para que ya no dependa de un trabajo de control y, en su lugar, ejecutará el bloque de transacción con suspensión desde runBlocking en el subproceso de transacción.

Versión 2.5.0

Versión 2.5.0

22 de febrero de 2023

Lanzamiento de androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 y androidx.room:room-paging-rxjava3:2.5.0. La versión 2.5.0 contiene estas confirmaciones.

Versión 2.5.0

11 de enero de 2023

Lanzamiento de androidx.room:room-*:2.5.0. La versión 2.5.0 contiene estas confirmaciones.

Cambios importantes desde 2.4.0

  • Todos los orígenes de room-runtime se convirtieron de Java a Kotlin Ten en cuenta que, si tu código está en Kotlin, es posible que encuentres problemas de incompatibilidad de origen debido a la conversión de la biblioteca a Kotlin. Por ejemplo, un cambio incompatible de origen conocido es que, en InvalidationTracker, ahora deberás declarar onInvalidate() en Observer para tener un parámetro de tipo Set, en lugar de MutableSet. Además, algunos métodos get se convirtieron en propiedades que requieren la sintaxis de acceso a las propiedades en archivos Kotlin. Informa un error si hay alguna incompatibilidad significativa.
  • Se agregó una nueva anotación de acceso directo, @Upsert, que intenta insertar una entidad cuando no hay conflicto de singularidad, o bien actualizar la entidad si es que lo hay (I7aaab, b/241964353).
  • Se agregaron los nuevos artefactos de room-paging room-paging-rxjava2, room-paging-rxjava3 y room-paging-guava para obtener compatibilidad con Paging de Room.
  • Se agregaron APIs para proporcionar nombres de tablas de clave y valor para la desambiguación en @MapInfo (Icc4b5).

Versión 2.5.0-rc01

7 de diciembre de 2022

Lanzamiento de androidx.room:room-*:2.5.0-rc01. La versión 2.5.0-rc01 contiene estas confirmaciones.

  • Esta versión es idéntica a la versión 2.5.0-beta02.

Versión 2.5.0-beta02

9 de noviembre de 2022

Lanzamiento de androidx.room:room-*:2.5.0-beta02. La versión 2.5.0-beta02 contiene estas confirmaciones.

Cambios en la API

  • Se corrigieron varias APIs que tomaban argumentos de consulta de invariantes (Array<Any?>) a contravariantes (Array<out Any?>) para que coincidan con el comportamiento del array de Java (b/253531073).

Versión 2.5.0-beta01

5 de octubre de 2022

Lanzamiento de androidx.room:room-*:2.5.0-beta01. La versión 2.5.0-beta01 contiene estas confirmaciones.

Cambios en la API

  • Restringe la versión mínima que admite @Upsert para que sea API 16. Esto se debe a la incapacidad de identificar un conflicto de restricción de clave primaria en APIs anteriores. (I5f67f, b/243039555)

Correcciones de errores

  • Se corrigió un problema en el que las tablas paralelas se exportaban de forma incorrecta a los archivos de esquema .json y se dañaban. (I4f83b, b/246751839)

Versión 2.5.0-alpha03

24 de agosto de 2022

Lanzamiento de androidx.room:room-*:2.5.0-alpha03. La versión 2.5.0-alpha03 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó una nueva anotación de acceso directo, @Upsert, que intenta insertar una entidad cuando no hay conflicto de singularidad, o bien actualizar la entidad si es que lo hay (I7aaab, b/241964353).

Correcciones de errores

  • Ahora Room mostrará una SQLiteConstraintException en lugar de una IllegalStateException durante la verificación automática de restricciones de clave externa (I328dd).
  • Se corrigió un cambio incompatible en el código fuente de Kotlin para el método get y las propiedades getOpenHelper, getQueryExecutor y getTransactionExecutor (Iad0ac).

Versión 2.5.0-alpha02

1 de junio de 2022

Lanzamiento de androidx.room:room-*:2.5.0-alpha02. La versión 2.5.0-alpha02 contiene estas confirmaciones.

Nuevas funciones

Cambios en la API

  • Todo el room-runtime se convirtió de Java a Kotlin (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/2).

    Nota: Es posible que encuentres problemas de incompatibilidad de origen debido a que la bibliotecas se convirtió a Kotlin. Si tu código estaba en Kotlin y llamaba a la versión anterior de Room, la nueva versión deberá controlar estos casos. Por ejemplo, un cambio incompatible de origen conocido es que, en InvalidationTracker, ahora deberás declarar onInvalidate() en Observer para tener un parámetro de tipo Set, en lugar de MutableSet.

  • Se agregaron APIs para proporcionar nombres de tablas de clave y valor para la desambiguación en @MapInfo (Icc4b5).
  • Se corrigió un problema de compatibilidad de origen para volver a permitir @Ignore en métodos get de propiedad (Ifc2fb).

Correcciones de errores

  • Se duplicó el algoritmo heurístico de resolución de columna. Ahora Room intentará resolver columnas ambiguas en una consulta multimapa. Esto permite que las JOIN con tablas que contienen tablas del mismo nombre se asignen correctamente a un objeto de datos de resultado (I4b444, b/201306012, b/212279118).

Versión 2.5.0-alpha01

23 de febrero de 2022

Lanzamiento de androidx.room:room-*:2.5.0-alpha01. La versión 2.5.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Se corrigió un problema por el que no se aplicaba el uso de Room @IntDef en fuentes de Kotlin (I75f41, b/217951311).
  • Se corrigió un problema de compatibilidad de origen para volver a permitir @Query en métodos get de propiedad (I0a09b).
  • Se convirtió room-common de Java a Kotlin (I69c48, b/206858235).

    Nota: Es posible que encuentres problemas de incompatibilidad de fuente, ya que algunas propiedades se trasladaron a objetos complementarios durante la conversión de biblioteca a Kotlin. Si tu código estaba en Kotlin y llamaba a la versión anterior de Room, la nueva versión necesitará el sufijo ".Companion" cuando accedas a esas propiedades.

  • Se convirtió room-migration de Java a Kotlin (I2724b, b/206858622).
  • Se convirtieron los archivos relacionados con paging en room-runtime de Java a Kotlin (I82fc8, b/206859668).
  • Se agregó una API para el bloqueo y uso de varios procesos a nivel de FrameworkSQLite* a fin de proteger la primera creación de bases de datos y migraciones de varios procesos (Ied267, b/193182592).

Correcciones de errores

  • Se agregó compatibilidad para propiedades internas en fuentes de Kotlin. Este es un pequeño cambio de comportamiento en Room, en el que se usa el nombre de origen de las funciones y se hace coincidir con propiedades como métodos get y set (antes se usaba el nombre JVM de la función, que es diferente para funciones o propiedades internas). Si usas anotaciones @JvmName personalizadas para hacer coincidir los métodos get y set con propiedades privadas, vuelve a verificar el código que se generó después de la actualización (If6531, b/205289020).

Versión 2.4.3

Versión 2.4.3

27 de julio de 2022

Lanzamiento de androidx.room:room-*:2.4.3. La versión 2.4.3 contiene estas confirmaciones.

Correcciones de errores

  • Se solucionó un problema por el que Room no reconocía las funciones de suspensión en Kotlin 1.7 (b/236612358).

Versión 2.4.2

Versión 2.4.2

23 de febrero de 2022

Lanzamiento de androidx.room:room-*:2.4.2. La versión 2.4.2 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un problema que generaba código para una función de suspensión @Transaction de Dao con un cuerpo que creaba un método de interfaz predeterminado debido a la compilación con -Xjvm-default=all o un elemento equivalente (Ia4ce5).
  • Se resolvió un error por el que Room generaba código para un método de consulta que muestra el tipo de datos Array<ByteArray> (If086e, b/213789489).

Versión 2.4.1

Versión 2.4.1

12 de enero de 2022

Lanzamiento de androidx.room:room-*:2.4.1. La versión 2.4.1 contiene estas confirmaciones.

Correcciones de errores

  • Se agregó compatibilidad para propiedades internas en fuentes de Kotlin. Este es un pequeño cambio de comportamiento en Room, en el que se usa el nombre de origen de las funciones y se hace coincidir con propiedades como métodos get y set (antes se usaba el nombre JVM de la función, que es diferente para funciones o propiedades internas). Si usas anotaciones @JvmName personalizadas para hacer coincidir los métodos get y set con propiedades privadas, vuelve a verificar el código que se generó después de la actualización (If6531, b/205289020).

Versión 2.4.0

Versión 2.4.0

15 de diciembre de 2021

Lanzamiento de androidx.room:room-*:2.4.0. La versión 2.4.0 contiene estas confirmaciones.

Cambios importantes desde la versión 2.3.0

  • Migraciones automáticas: Ahora, Room ofrece una API para generar migraciones automáticamente siempre que se exporten esquemas. Si deseas indicarle a Room que debe generar una migración automática, se puede usar una nueva propiedad @Database#autoMigrations para declarar las versiones desde y hasta las cuales se realizará la migración automática. Cuando Room necesita información adicional sobre el cambio de nombre o la eliminación de tablas y columnas, la anotación @AutoMigration puede declarar una clase de especificación que contiene esas entradas. Para obtener más detalles, consulta la documentación de @AutoMigration.
  • Inserción de dependencias en migraciones automáticas: @ProvidedAutoMigrationSpec es una nueva API proporcionará una AutoMigrationSpec en el tiempo de ejecución a través de RoomDatabase.Builder#addAutoMigrationSpec(). De esta manera, un framework de inyección de dependencia puede proporcionar esas especificaciones cuando necesiten dependencias complejas.
  • Compatibilidad con el asistente de pruebas de migración para migraciones automáticas: Se actualizó el objeto MigrationTestHelper de Room para admitir migraciones automáticas mediante una nueva API de constructor que recibe la clase de base de datos en evaluación. Esto permite que el asistente agregue automáticamente migraciones automáticas de la misma manera durante runMigrationsAndValidate.
  • Compatibilidad con Room-Paging: Se lanzó androidx.room:room-paging, que proporciona compatibilidad nativa con Paging 3.0 para las consultas de Room que muestran androidx.paging.PagingSource.
  • Métodos de consulta relacionadas: Room ahora admite métodos @Dao que muestran tipos de datos multimapa, que son útiles para las instrucciones JOIN. Los tipos de multimapas compatibles son Map, SparseArray y LongSparseArray, además de ImmutableMap, ImmutableSetMultimap e ImmutableListMultimap de Guava.

Versión 2.4.0-rc01

1 de diciembre de 2021

Lanzamiento de androidx.room:room-*:2.4.0-rc01. La versión 2.4.0-rc01 contiene estas confirmaciones.

Nuevas funciones

  • Se actualizó la dependencia de Room en KSP a 1.6.0-1.0.1 para admitir Kotlin 1.6.

Versión 2.4.0-beta02

17 de noviembre de 2021

Lanzamiento de androidx.room:room-*:2.4.0-beta02. La versión 2.4.0-beta02 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó compatibilidad para SparseArray y LongSparseArray en @MapInfo. (Ic91a2b/138910317)

Correcciones de errores

  • Se agregó un nuevo analizador TypeConverter que toma en cuenta la información sobre la nulabilidad en tipos. Como esta información solo está disponible en KSP, se activa solo en KSP de forma predeterminada. Si se produce algún problema, puedes desactivarla si pasas room.useNullAwareTypeAnalysis=false al procesador de anotaciones. Si esto sucede, informa un error, ya que esta marca se quitará en el futuro. Con este nuevo analizador TypeConverter, te recomendamos que solo proporciones TypeConverter que no reciban valores nulos, ya que el nuevo analizador tiene la capacidad de unirlos con una verificación de nulabilidad. Ten en cuenta que no afecta a los usuarios que usan KAPT o Java, ya que los procesadores de anotaciones (a diferencia de KSP) no tienen información sobre la nulabilidad en tipos (Ia88f9, b/193437407).
  • Se corrigió un error por el que Room no podía hacer una compilación con un error de SQL cuando una entidad FTS declaraba usar el tokenizador de ICU (I00db9, b/201753224).
  • Se resolvió un problema en las migraciones automáticas relacionadas con una columna nueva que se agregaba a una entidad incorporada entre versiones (I5fcb1b/193798291).
  • Se resolvió un problema relacionado con los tipos de datos que muestran los métodos de consultas relacionales en las consultas LEFT JOIN. Con estos cambios, en los casos en que haya una asignación de uno a varios, la colección que se muestra para una clave no incluirá el objeto de valor no válido si no se encuentra en el cursor. Si no se encuentran valores válidos, la clave se asignará a una colección vacía (Id5552b/201946438).
  • Se resolvió el problema de migración automática por el que las palabras clave SQLite no se podían escapar en los nombres de las columnas (Idbed4b/197133152).

Versión 2.4.0-beta01

13 de octubre de 2021

Lanzamiento de androidx.room:room-*:2.4.0-beta01. La versión 2.4.0-beta01 contiene estas confirmaciones.

Correcciones de errores

  • Se solucionó un problema por el que las migraciones automáticas no agregaban columnas nuevas cuando otra tabla de la misma migración también tenía una columna nueva con el mismo nombre (Ia5db5, b/200818663).
  • La implementación de PagingSource que generaba la paginación de Room ahora usa el queryExecutor que pasa RoomDatabase.Builder, por lo que se puede anular, en lugar de Dispatchers.IO como era antes (Iae259).

Versión 2.4.0-alpha05

29 de septiembre de 2021

Lanzamiento de androidx.room:room-*:2.4.0-alpha05. La versión 2.4.0-alpha05 contiene estas confirmaciones.

Nuevas funciones

Cambios en la API

  • Se agregó una nueva propiedad a la anotación TypeConverters para permitir que los desarrolladores inhabiliten los convertidores Enum y UUID integrados. De forma predeterminada, estos convertidores están activados, pero puedes inhabilitarlos para un alcance determinado o para toda la base de datos. Consulta la documentación de TypeConverters para obtener más información. (36ae9e, b/195413406)

  • Compatibilidad con pares clave-valor que no son POJO para los DAO que muestran tipos de datos multimapa mediante la anotación @MapInfo (I4d704)

Se requerirá @MapInfo cuando la columna de clave o valor del mapa corresponda a una sola columna. Mira el ejemplo:

@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>
  • Haz que room-paging sea un artefacto obligatorio cuando uses Paging3 con Room. (Ieaffe)

Correcciones de errores

  • Se corrigió un problema en el que los resultados de las consultas multimapa no se ordenaban correctamente cuando la consulta contenía una cláusula ORDER BY de una columna de la clave del mapa. (I6b887)

Contribución externa

  • Se agregó una nueva API para especificar el orden de índices en @Index. Gracias a Nikita Zhelonkin. (I033fc)

Versión 2.4.0-alpha04

21 de julio de 2021

Lanzamiento de androidx.room:room-*:2.4.0-alpha04. La versión 2.4.0-alpha04 contiene estas confirmaciones.

Nuevas funciones

  • Ahora Room admite métodos @Dao que muestran tipos de datos multimapa, que son útiles para las instrucciones JOIN. Los tipos de multimapas compatibles son Map y también ImmutableMap, ImmutableSetMultimap o ImmutableListMultimap de Guava.

    Los siguientes son ejemplos de consultas multimapa:

    Mapa de relación de uno a uno

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

    Mapa de relación de uno a varios (multimapa estándar)

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

    El resultado de multimapa también se puede unir en los tipos de datos asíncronos y compatibles que se muestran, como LiveData, Observable de Rx o Flow de corrutinas.

Room-Paging

  • Se lanza androidx.room:room-paging, que brinda compatibilidad nativa con Paging 3.0 para las consultas de Room que muestran androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • Este artefacto reemplaza la implementación de androidx.paging.PagingSource que genera Room con una que se compila sobre las APIs de Paging 3.0. La implementación nueva de PagingSource analiza las claves de manera diferente, por lo que cualquier clave que se le brinde de forma manual a PagingSource de Room debería tener en cuenta este cambio de comportamiento, que incluye initialKey que se pasa a través del constructor de Pager. Las páginas comenzarán a cargarse desde el elemento Key, y Key será el primero que se cargue. Esto se desvía del comportamiento existente en el que LoadParams.Refresh.Key se trata como la posición de desplazamiento del usuario, y los elementos se cargan antes de la clave y después de esta.

  • El artefacto es opcional y, para inhabilitarlo, se recurrirá a la compatibilidad existente con Paging 3.0 que se introdujo en Room 2.3. Sin embargo, este artefacto dejará de ser opcional en una versión futura para quienes usen Room con Paging 3.0. Para habilitarlo, agrega el artefacto nuevo room-paging a la ruta de clase. Si usas Gradle, puedes agregar el siguiente fragmento a build.gradle:

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

Correcciones de errores

  • Se solucionó un problema de las migraciones automáticas en relación con el control de incumplimientos de claves externas. (b/190113935)

Versión 2.4.0-alpha03

16 de junio de 2021

Lanzamiento de androidx.room:room-*:2.4.0-alpha03. La versión 2.4.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Actualiza el objeto MigrationTestHelper de Room para admitir las migraciones automáticas mediante una API de constructor nueva que recibe la clase de base de datos en evaluación. Esto permite que el asistente agregue automáticamente migraciones automáticas de la misma manera durante runMigrationsAndValidate.

Correcciones de errores

  • Se solucionó un problema con la biblioteca nativa de SQLite de Room para admitir los chips M1 de Apple (b/174695268).

  • Se solucionó un problema por el que Room no generaba un error cuando el tipo de datos de @Transaction que se mostraba era un flujo (I56ddd, b/190075899).

  • Se corrigió un error en las migraciones automáticas relacionadas con índices (b/177673291).

Actualizaciones de dependencias

  • La compatibilidad con KSP de Room ahora depende de KSP 1.5.10-1.0.0-beta01 (1ecb11, b/160322705).

Versión 2.4.0-alpha02

5 de mayo de 2021

Lanzamiento de androidx.room:room-*:2.4.0-alpha02. La versión 2.4.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • @ProvidedAutoMigrationSpec es una API nueva destinada a declarar que se proporcionará una AutoMigrationSpec en el tiempo de ejecución a través de RoomDatabase.Builder#addAutoMigrationSpec(). De esta manera, un framework de inyección de dependencia puede proporcionar esas especificaciones cuando necesiten dependencias complejas.

Correcciones de errores

  • Se corrigió un error en las migraciones automáticas en las que @DatabaseView no se creaba de manera correcta.

Contribución externa

  • Se solucionó un problema en el modo JournalMode.TRUNCATE de Room en el que a veces la devolución de llamada InvalidationTracker no se invocaba o se hacía demasiado tarde o de manera inválida. Le agradecemos a Uli Bubenheimer | bubenheimer@users.noreply.github.com (b/154040286).

Versión 2.4.0-alpha01

21 de abril de 2021

Lanzamiento de androidx.room:room-*:2.4.0-alpha01. La versión 2.4.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Migraciones automáticas: Ahora, Room ofrece una API para generar migraciones automáticamente siempre que se exporten esquemas. Si deseas indicarle a Room que debe generar una migración automática, se puede usar una nueva propiedad @Database#autoMigrations para declarar las versiones desde y hasta las cuales se realizará la migración automática. Cuando Room necesita información adicional sobre el cambio de nombre o la eliminación de tablas y columnas, la anotación @AutoMigration puede declarar una clase de especificación que contiene esas entradas. Para obtener más detalles, consulta la documentación de @AutoMigration.

Correcciones de errores

  • Se corrigió un problema en el que la validación del esquema de Room validaba, de manera incorrecta, el elemento defaultValue con paréntesis adicionales (b/182284899).

Versión 2.3.0

Versión 2.3.0

21 de abril de 2021

Lanzamiento de androidx.room:room-*:2.3.0. La versión 2.3.0 contiene estas confirmaciones.

Cambios importantes desde la versión 2.2.0

  • Compatibilidad integrada de Enum: 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 enum, Room priorizará su uso en lugar del valor predeterminado.
  • Devolución de llamada de consulta: Ahora Room ofrece una API de callback general de RoomDatabase.QueryCallback, para cuando las consultas están por ejecutarse, lo que puede ser útil si deseas registrar compilaciones de depuración. Se puede configurar la devolución de llamada con RoomDatabase.Builder#setQueryCallback().
  • Mejora en base de datos empaquetada previamente: Ahora, Room tiene API para crear una base de datos con una lectura de base de datos empaquetada previamente de un flujo de entrada. Esto permite casos como la compresión con gzip de la base de datos previamente empaquetada.
  • Convertidores de tipo proporcionados: 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.
  • Compatibilidad con RxJava3: Room ahora admite tipos de RxJava3. De manera similar al objeto RxJava2, puedes declarar métodos DAO que muestran tipos de datos Flowable, Single, Maybe y Completable. Además, hay un nuevo artefacto androidx.room:room-rxjava3 disponible para admitir el elemento RxJava3.
  • Compatibilidad con Paging 3.0: Ahora Room admitirá la generación de implementaciones para los métodos @Query con anotaciones que muestren el tipo de datos androidx.paging.PagingSource.

Versión 2.3.0-rc01

24 de marzo de 2021

Lanzamiento de androidx.room:room-*:2.3.0-rc01. La versión 2.3.0-rc01 contiene estas confirmaciones.

Correcciones de errores

  • Se solucionó un problema que impedía que se consumieran las consultas de flujo de corrutinas creadas por Room en un bloque withTransaction suspendido (I797bf).

Versión 2.3.0-beta03

10 de marzo de 2021

Lanzamiento de androidx.room:room-*:2.3.0-beta03. La versión 2.3.0-beta03 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó compatibilidad de compilación incremental para KSP (I031c1, b/176453350).

Correcciones de errores

  • Se corrigió un error en el que la creación de PagingSource en el subproceso principal podía activar un ANR (I42b74, b/181221318).
  • Se corrigió la visibilidad de @ExperimentalRoomApi para que sea público en lugar de un paquete privado (b/181356119).

Contribución externa

  • Permite que Room acepte mostrar un tipo de datos POJO para un método DAO anotado @Query cuando también se anota con @SkipQueryVerification. Room hará lo posible por convertir el resultado de la consulta que se muestra en un tipo de datos POJO, de la misma manera que se hace para un método DAO anotado @RawQuery. Gracias a "Markus Riegel | hey@marcorei.com" (I45acb).

Versión 2.3.0-beta02

18 de febrero de 2021

Lanzamiento de androidx.room:room-*:2.3.0-beta02. La versión 2.3.0-beta02 contiene estas confirmaciones.

Nuevas funciones

  • Ahora, Room cuenta con compatibilidad experimental para el Procesamiento de Símbolos de Kotlin KSP.

    KSP reemplaza las KAPT para ejecutar procesadores de anotaciones de forma nativa en el compilador de Kotlin, lo que reduce significativamente los tiempos de compilación.

    Para usar Room con KSP, puedes aplicar el complemento de KSP de Gradle y reemplazar la configuración kapt en tu archivo de compilación por ksp. Por ejemplo, en lugar de kapt 'androidx.room:room-compiler:2.3.0-beta02', usa ksp 'androidx.room:room-compiler:2.3.0-beta02'. Consulta la documentación de KSP para obtener más detalles.

    Ten en cuenta que, como KSP es experimental, se recomienda seguir usando KAPT para el código de producción. La reducción de los tiempos de compilación solo es aplicable si no hay otros procesadores que usen KAPT. Consulta b/160322705 para ver los problemas conocidos.

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 con RoomDatabase.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 enum, Room priorizará su uso en lugar del 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 si se lo convierte 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 APIs 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 la compresión con gzip de 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 en RoomDatabase.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/153948821).

  • 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 en RoomDatabase con Collections.synchronizedMap() para evitar problemas en Android Lollipop (d1cfc7, b/162431855).

  • 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: Room ahora admite tipos de RxJava3. De manera similar al objeto RxJava2, puedes declarar métodos DAO que muestran tipos de datos 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 @Query con anotaciones que muestren el tipo de datos androidx.paging.PagingSource.

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

Cambios en la API

  • @RewriteQueriesToDropUnusedColumns es una anotación nueva y conveniente que hace que Room reescriba la proyección "*" en una consulta de modo que se quiten las columnas no utilizadas en el resultado.
  • La opción de procesador room.expandProjection ya no está disponible. Usa @RewriteQueriesToDropUnusedColumns como reemplazo para las consultas de optimización de Room con proyecciones "*". Ten en cuenta que @RewriteQueriesToDropUnusedColumns no reemplaza la solución al conflicto de columnas que ofrecía room.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 por 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 mostrara 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 compilador expandProjection activada (b/140759491).
  • Se agregó un mecanismo de reintento para administrar la biblioteca nativa faltante que se utiliza para verificar consultas 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 APIs 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 APIs 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 no ser posible, como último recurso descartará todas las tablas y volverá a crearlas (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 los 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> 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 consulta. 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
  • Expansión de proyecciones: Se agregó una nueva opción experimental de compilador room.expandProjection, que hace que Room reescriba una consulta con una proyección "*" 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 consulta 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 consulta 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 vínculo.

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 consulta 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 vínculo.

Nuevas funciones

  • Flujo de corrutinas: Los métodos DAO @Query ahora pueden ser Flow<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 consulta. 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).
  • Expansión de proyecciones: Se agregó una nueva opción experimental de compilador room.expandProjection, que hace que Room reescriba una consulta con una proyección "*" 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 consulta 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 consulta muestra columnas adicionales que no coinciden con ningún campo en el tipo de POJO que se muestra.
  • onDestructiveMigrate es una nueva API de callback que se agrega a RoomDatabase.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 que 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 métodos set 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 consulta 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 APIs 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 APIs 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 no ser posible, como último recurso descartará todas las tablas y volverá a crearlas (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 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 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 antes de que se complete la 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 anotada 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 consulta 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 mostrar los tipos de datos Rx Completable, Single, Maybe, y el tipo de datos 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 vínculo.

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 consultas 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 consulta 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 consultas en diferentes subprocesos (b/120109336).
  • OnConflictStrategy.FAIL y OnConflictStrategy.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() 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 asignadores de tokens integrados todavía están definidos en FtsOptions como constantes de cadena (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 corrigió 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 por 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 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 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 por el que Room realizaba operaciones de E/S en el disco en el subproceso principal al suscribirse y desechar un tipo de datos que se muestra 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 problema 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 mostrar los tipos de datos 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 personalizar dónde se ejecutan las consultas.
  • 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 por 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 Rx de Room, en el que se reciclaba la consulta 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 consulta. 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 Relations (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 la instrucción SQL como un parámetro de consulta. b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: Esta API nueva en RoomDatabase.Builder permite controlar de manera más detallada desde qué versiones de esquema iniciales se permiten las migraciones destructivas (en comparación con fallbackToDestructiveMigration). b/64989640
  • Ahora Room solo es compatible con las APIs 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).