O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Room

A biblioteca de persistência Room oferece uma camada de abstração sobre o SQLite para permitir um acesso mais robusto ao banco de dados, aproveitando toda a capacidade do SQLite.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
14 de outubro de 2020 2.2.5 - - 2.3.0-alpha03

Declarar dependências

Para adicionar uma dependência à Room, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

As dependências da Room incluem testes de migrações da Room e RxJava da Room

Adicione as dependências dos artefatos necessários no arquivo build.gradle para seu app ou módulo:

Kotlin

dependencies {
  def room_version = "2.2.5"

  implementation "androidx.room:room-runtime:$room_version"
  kapt "androidx.room:room-compiler:$room_version"

  // optional - Kotlin Extensions and Coroutines support for Room
  implementation "androidx.room:room-ktx:$room_version"

  // optional - Test helpers
  testImplementation "androidx.room:room-testing:$room_version"
}

Java

dependencies {
  def room_version = "2.2.5"

  implementation "androidx.room:room-runtime:$room_version"
  annotationProcessor "androidx.room:room-compiler:$room_version"

  // optional - RxJava support for Room
  implementation "androidx.room:room-rxjava2:$room_version"

  // optional - Guava support for Room, including Optional and ListenableFuture
  implementation "androidx.room:room-guava:$room_version"

  // optional - Test helpers
  testImplementation "androidx.room:room-testing:$room_version"
}

Para ver mais informações sobre o uso de extensões Kotlin, consulte a documentação do Android KTX.

Para ver mais informações sobre dependências, consulte Adicionar dependências de versão.

Configurar opções do compilador

A Room conta com as seguintes opções de processador de anotações:

  • room.schemaLocation: configura e ativa a exportação de esquemas de banco de dados para arquivos JSON no diretório especificado. Consulte Migrações da Room para mais informações.
  • room.incremental: ativa o processador de anotações incrementais do Gradle.
  • room.expandProjection: configura a Room para reescrever consultas, de forma que a principal projeção em estrela seja expandida para conter apenas as colunas definidas no tipo de retorno do método DAO.

Um exemplo de como essas opções podem ser configuradas é mostrado no snippet de código a seguir:

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += [
                    "room.schemaLocation":"$projectDir/schemas".toString(),
                    "room.incremental":"true",
                    "room.expandProjection":"true"]
            }
        }
    }
}

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas existentes (link em inglês) nesta biblioteca antes de criar um novo. Adicione seu voto a um problema existente clicando no botão de estrela.

Criar uma nova edição

Consulte a documentação do Issue Tracker para saber mais.

Versão 2.3.0

Versão 2.3.0-alpha03

14 de outubro de 2020

Lançamento de androidx.room:room-*:2.3.0-alpha03. A versão 2.3.0-alpha03 contém estas confirmações.

Novos recursos

  • A Room agora tem APIs para fornecer instâncias de conversores de tipo, de modo que o app possa controlar a inicialização delas. Para marcar um conversor de tipo que será fornecido à Room, use a nova anotação @ProvidedTypeConverter. Graças a "mzgreen yairobbe@gmail.com" (Ie4fa5, b/121067210).

  • A Room agora tem APIs para criar um banco de dados usando um banco de dados pré-empacotado lido de um stream de entrada. Isso permite casos como quando o banco de dados de pré-pacote está compactado em gzip. Graças a "Ahmed El-Helw ahmedre@gmail.com" (3e6792, b/146911060).

Mudanças na API

  • Adição de destino ausente à anotação @ForeignKey, para evitar o uso fora da anotação @Entity (Iced1e).

  • O campo mCallbacks em RoomDatabase.java agora está oculto (d576cb, b/76109329).

Correções de bugs

  • Atualização da documentação de TypeConverters para esclarecer que os TypeConverters só podem ser usados para converter colunas / campos, não linhas (I07c56, b/77307836).

  • Atualização do DaoProcessor para corrigir erros do compilador no Dao usando um supertipo genérico com "primitivos" do Kotlin (Ice6bb, b/160258066).

  • Atualização da documentação dos métodos de adição/remoção do observador para esclarecer as linhas de execução (Ifd1d9, b/115388921).

  • Correção de um problema com a Room validando de maneira incorreta as tabelas FTS que declaravam a coluna rowid (d62ebc, b/145858914).

Contribuições externas

  • Correção de problemas de localidade relacionados a maiúsculas/minúsculas no turco (5746e3, b/68159494).

  • Substituição do ConcurrentHashMap dentro do RoomDatabase por Collections.synchronizedMap() para evitar problemas no Android Lollipop (d1cfc7, b/162431855).

  • Adição de um callback onOpenPrepackagedDatabase para quando um banco de dados pré-empacotado é copiado (I1ba74, b/148934423).

Versão 2.3.0-alpha02

22 de julho de 2020

Lançamento do androidx.room:room-*:2.3.0-alpha02. A versão 2.3.0-alpha02 contém essas confirmações (link em inglês).

Novos recursos

  • Compatibilidade com RxJava3: a Room agora é compatível com tipos RxJava3. Assim como no RxJava2, você pode declarar métodos DAO em que os tipos de retorno são Flowable, Single, Maybe e Completable. Além disso, um novo artefato androidx.room:room-rxjava3 está disponível para manter a compatibilidade com o RxJava3 (b/152427884).

Mudanças na API

  • Agora há compatibilidade com a declaração de um @TypeConverter na classe de objeto do Kotlin (b/151110764).
  • A opção de processamento incremental de anotações da Room agora é ativada por padrão (b/112110217).

Versão 2.3.0-alpha01

10 de junho de 2020

Lançamento de androidx.room:room-*:2.3.0-alpha01. A versão 2.3.0-alpha01 contém essas confirmações (link em inglês).

Novos recursos

  • Compatibilidade com Paging 3.0: a Room agora será compatível com a geração de implementações para métodos @Query anotados cujo tipo de retorno é androidx.paging.PagingSource.

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

Mudanças na API

  • @RemoveUnusedColumns é uma nova anotação conveniente que faz com que a Room reescreva a projeção "*" em uma consulta para que as colunas não usadas no resultado sejam removidas.
  • A opção de processador room.expandProjection está obsoleta. Use @RemoveUnusedColumns para substituir consultas de otimização da Room com projeções em estrela. Observe que @RemoveUnusedColumn não substitui a solução de conflito de colunas room.expandProjection oferecida em relação aos tipos de retorno que continham campos @Embedded.

Correções de bugs

  • Correção de um bug em que a Room não detectava corretamente a versão do JDK usada para ativar o processador de anotações incremental. Agradecimentos ao Blaz Solar (me@blaz.solar) (b/155215201, link em inglês)
  • A Room agora incorpora a dependência ANTLR com o processador de anotações para evitar conflitos de versão com outros processadores que também usam o ANTLR (b/150106190, link em inglês).

Versão 2.2.5

Versão 2.2.5

18 de março de 2020

androidx.room:room-*:2.2.5 é lançado. A versão 2.2.5 contém essas confirmações (link em inglês).

Correções de bugs

  • MultiInstanceInvalidationService agora é directBootAware. Graças a "Mygod contact-git@mygod.be" (b/148240967, link em inglês).
  • Correção de um bug que causava uma falha quando a invalidação de várias instâncias era ativada e o banco de dados continha uma entidade FTS (b/148969394, link em inglês).
  • Correção de um problema ao carregar as bibliotecas nativas do SQLite no processador de anotação da Room, causando falhas no compilador devido a compilações paralelas (b/146217083, link em inglês).

Versão 2.2.4

Versão 2.2.4

19 de fevereiro de 2020

Lançamento 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 e androidx.room:room-testing:2.2.4. A versão 2.2.4 contém essas confirmações (link em inglês).

Correções de bugs

  • Correção de um problema com a suspensão de transações em que elas eram bloqueadas quando a corrotina era cancelada rapidamente antes do início da transação (b/148181325, link em inglês).
  • Correção de um problema em que o @Generated era usado incorretamente ao compilar com o JDK 9 (b/146538330, link em inglês).
  • Correção de um problema em que a Room gerava código incorreto quando uma interface DAO no Kotlin tinha uma função concreta (b/146825845, link em inglês).

Versão 2.2.3

Versão 2.2.3

18 de dezembro de 2019

Lançamento do androidx.room:room-*:2.2.3. A versão 2.2.3 contém essas confirmações (link em inglês).

Correções de bugs

  • Correção de um bug em que a Room não validava um banco de dados que não tinha passado por uma migração e continha um hash herdado com índices no esquema. (b/139306173, todos os links do rastreador de problemas estão em inglês)

Versão 2.2.2

Versão 2.2.2

20 de novembro de 2019

Lançamento do androidx.room:room-*:2.2.2. A versão 2.2.2 contém essas confirmações (link em inglês).

Correções de bugs

  • Correção de um bug em que a coleção de um relacionamento um para um com mais de 999 linhas fazia com que a Room retornasse itens relacionados nulos. (b/143105450)

Versão 2.2.1

Versão 2.2.1

23 de outubro de 2019

Lançamento do androidx.room:room-*:2.2.1. A versão 2.2.1 contém essas confirmações (link em inglês).

Correções de bugs

  • Correção de um bug em que a Room alertava incorretamente sobre CURSOR_MISMATCH com a opção de compilador expandProjection ativada. (b/140759491)
  • Adição de um mecanismo de repetição para lidar com a biblioteca nativa ausente usada para verificar consultas durante o tempo de compilação.

Versão 2.2.0

Versão 2.2.0

9 de outubro de 2019

Lançamento do androidx.room:room-*:2.2.0. A versão 2.2.0 contém essas confirmações (link em inglês).

Mudanças importantes desde a versão 2.1.0

  • Banco de dados pré-empacotado: duas novas APIs em RoomDatabase.Builder agora estão disponíveis para criar um RoomDatabase dado um arquivo de banco de dados já preenchido. createFromAsset() é usado quando o arquivo de banco de dados pré-preenchido está na pasta de recursos do APK, enquanto createFromFile() é usado quando o arquivo está em um local arbitrário. Os usos dessas APIs modificam o comportamento das migrações destrutivas de modo que, durante uma migração substituta, a Room tentará copiar novamente o banco de dados pré-preenchido, se disponível. Caso contrário, ele substitui e recria todas as tabelas (b/62185732, link em inglês).
  • Valores padrão do esquema: @ColumnInfo agora tem uma nova propriedade defaultValue, que pode ser usada para especificar o valor padrão de uma coluna. Os valores padrão fazem parte de um esquema do banco de dados e serão validados durante as migrações, se especificado (b/64088772, link em inglês).
  • Relações de muitos para muitos: @Relation agora tem uma nova propriedade associateBy, que usa uma nova anotação @Junction, usada para declarar uma relação que precisa ser satisfeita por meio de uma tabela de junção (também conhecida como tabela mesclada). b/69201917, link em inglês.
  • Relações de um para um: a restrição nos campos de POJO anotada com @Relation para ser do tipo List ou Set foi cancelada, permitindo efetivamente relações de valor único representado. b/62905145, link em inglês.
  • Entidade de destino: as anotações DAO @Insert, @Update e @Delete agora têm uma nova propriedade targetEntity, que permite especificar a tabela de destino em que o método DAO atuará. Isso permite que os parâmetros desses métodos DAO sejam POJOs arbitrários, que serão interpretados como entidades parciais. Na prática, isso permite inserções, exclusões e atualizações parciais. b/127549506, link em inglês.
  • Fluxo de corrotinas: os métodos DAO @Query agora podem ser do tipo de retorno Flow<T>. O fluxo retornado reemitirá um novo conjunto de valores se as tabelas de observação na consulta forem invalidadas. A declaração de uma função DAO com um tipo de retorno Channel<T> é um erro. A Room recomenda o uso de Flow seguido das funções vizinhas para converter o Flow em Channel. b/130428884, link em inglês.
  • Processador de anotação incremental do Gradle: a Room agora é um processador de anotação de isolamento Gradle, e a incrementabilidade pode ser ativada por meio da opção room.incremental do processador. Consulte Opções do compilador da Room para ver mais informações. Caso encontre algum problema, informe um bug neste link. Planejamos ativar a incrementabilidade por padrão em uma versão futura e estável. b/112110217, link em inglês.
  • Projeções de expansão: foi adicionada uma nova opção de compilador experimental room.expandProjection, que faz com que a Room reescreva uma consulta com uma projeção em estrela para conter apenas as colunas no tipo de retorno POJO. Por exemplo, para um método DAO com @Query("SELECT * FROM Song") que retorna um POJO chamado SongIdAndTitle com apenas dois campos. Em seguida, a Room reescreverá a consulta para SELECT id, title FROM Song, de forma que o conjunto mínimo de colunas para satisfazer o tipo de retorno seja buscado. Isso basicamente elimina o aviso CURSOR_MISMATCH que é apresentado quando a consulta retorna colunas extras que não correspondem a nenhum campo no tipo POJO retornado.

Versão 2.2.0-rc01

5 de setembro de 2019

Lançamento do androidx.room:room:2.2.0-rc01. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Nenhuma alteração pública desde a Room 2.2.0-beta01.

Versão 2.2.0-beta01

22 de agosto de 2019

Lançamento do androidx.room:room-*:2.2.0-beta01. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Correções de bugs

  • Correção de um bug em que uma consulta do fluxo de corrotinas parava de reemitir novos valores depois de um certo tempo. (b/139175786)
  • Correção de um bug em que a Room não aceitava um código hash de esquema legado ao abrir um banco de dados que não havia passado por uma migração desde a Room 1.0, causando uma falha no ambiente de execução devido a um esquema inválido. (b/139306173)

Versão 2.2.0-alpha02

7 de agosto de 2019

Lançamento do androidx.room:room-*:2.2.0-alpha02. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Novos recursos

  • Fluxo de corrotinas: os métodos DAO @Query agora podem ser do tipo de retorno Flow<T>. O fluxo retornado reemitirá um novo conjunto de valores se as tabelas de observação na consulta forem invalidadas. A declaração de uma função DAO com um tipo de retorno Channel<T> é um erro. A Room recomenda o uso de Flow seguido das funções vizinhas para converter o Flow em Channel. b/130428884, link em inglês.
  • Projeções de expansão: foi adicionada uma nova opção de compilador experimental room.expandProjection, que faz com que a Room reescreva uma consulta com uma projeção em estrela para conter apenas as colunas no tipo de retorno POJO. Por exemplo, para um método DAO com @Query("SELECT * FROM Song") que retorna um POJO chamado SongIdAndTitle com apenas dois campos. Em seguida, a Room reescreverá a consulta para SELECT id, title FROM Song, de forma que o conjunto mínimo de colunas para satisfazer o tipo de retorno seja buscado. Isso basicamente elimina o aviso CURSOR_MISMATCH que é apresentado quando a consulta retorna colunas extras que não correspondem a nenhum campo no tipo POJO retornado.
  • onDestructiveMigrate é uma nova API callback adicionada a RoomDatabase.Callback para quando a Room migra destrutivamente um banco de dados. b/79962330, link em inglês.

Correções de bugs

  • Correção de um bug em que a Room gerava código incorreto usando um método como setter de campo quando o campo é protegido. b/14094628, link em inglês.
  • Correção de um bug que fazia o InvalidationTracker lançar um NPE em um segundo processo quando a invalidação de várias instâncias era ativada e o serviço de invalidação era eliminado. b/123454915, link em inglês.
  • Correção de um bug em que a Room não identificava corretamente o tipo de retorno de uma função de suspensão legada anotada com @RawQuery. b/137878827, link em inglês.
  • O código gerado para @Relation foi atualizado quando a chave relacionada é do tipo BLOB para usar um ByteBuffer comparável. b/137881998, link em inglês.
  • Correção de um bug em que a Room informava a ausência de setters nos POJOs usados como parâmetros parciais da entidade de @Insert, @Update e @Delete. b/138664463, link em inglês.
  • Correção de um bug em que a Room informava a ausência de getters e setters para uma coluna ignorada via @Entity quando a classe de entidade era usada em determinados métodos DAO. b/138238182, link em inglês.
  • Correção de um bug em que a Room não convertia corretamente argumentos de vinculação nomeados em argumentos posicionais, causando uma exceção de tempo de execução ao executar uma consulta com parâmetros reutilizados. b/137254857, link em inglês.

Versão 2.2.0-alpha01

10 de julho de 2019

Novos recursos

  • Banco de dados pré-empacotado: duas novas APIs em RoomDatabase.Builder agora estão disponíveis para criar um RoomDatabase dado um arquivo de banco de dados já preenchido. createFromAsset() é usado quando o arquivo de banco de dados pré-preenchido está na pasta de recursos do APK, enquanto createFromFile() é usado quando o arquivo está em um local arbitrário. Os usos dessas APIs modificam o comportamento das migrações destrutivas de modo que, durante uma migração substituta, a Room tentará copiar novamente o banco de dados pré-preenchido, se disponível. Caso contrário, ele substitui e recria todas as tabelas (b/62185732, link em inglês).
  • Valores padrão do esquema: @ColumnInfo agora tem uma nova propriedade defaultValue, que pode ser usada para especificar o valor padrão de uma coluna. Os valores padrão fazem parte de um esquema do banco de dados e serão validados durante as migrações, se especificado (b/64088772, link em inglês).

    Observação: se o esquema do banco de dados já tiver valores padrão, como os adicionados por ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z, e você decidir definir valores padrão por @ColumnInfo para as mesmas colunas, talvez seja necessário fornecer uma migração para validar os valores padrão não contabilizados. Consulte Migrações da Room para mais informações.

  • Relações de muitos para muitos: @Relation agora tem uma nova propriedade associateBy, que usa uma nova anotação @Junction, usada para declarar uma relação que precisa ser satisfeita por meio de uma tabela de junção (também conhecida como tabela mesclada). b/69201917, link em inglês.
  • Relações de um para um: a restrição nos campos de POJO anotada com @Relation para ser do tipo List ou Set foi cancelada, permitindo efetivamente relações de valor único representado. b/62905145, link em inglês.
  • Entidade de destino: as anotações DAO @Insert, @Update e @Delete agora têm uma nova propriedade targetEntity, que permite especificar a tabela de destino em que o método DAO atuará. Isso permite que os parâmetros desses métodos DAO sejam POJOs arbitrários, que serão interpretados como entidades parciais. Na prática, isso permite inserções, exclusões e atualizações parciais. b/127549506, link em inglês.
  • Processador de anotação incremental do Gradle: a Room agora é um processador de anotação de isolamento Gradle, e a incrementabilidade pode ser ativada por meio da opção room.incremental do processador. Consulte Opções do compilador da Room para ver mais informações. Caso encontre algum problema, informe um bug neste link. Planejamos ativar a incrementabilidade por padrão em uma versão futura e estável. b/112110217, link em inglês.

Correções de bugs

  • A Room não propagará mais o EmptySetResultException para o gerenciador de erros global quando o fluxo Rx de uma consulta for descartado antes da conclusão dessa consulta. b/130257475, link em inglês.
  • Correção de um bug em que a Room exibia uma mensagem de erro incorreta quando uma função DAO de suspensão anotada com @RawQuery não tinha um tipo de retorno. b/134303897, link em inglês.
  • A Room não gerará mais adaptadores DAO com tipos brutos. b/135747255, link em inglês.

Versão 2.1.0

Versão 2.1.0

13 de junho de 2019

Lançamento da Room 2.1.0 sem alterações do 2.1.0-rc01. As confirmações incluídas nessa versão podem ser encontradas neste link.

Mudanças importantes desde a versão 2.0.0

  • FTS: a Room agora é compatível com entidades com uma tabela de mapeamento FTS3 ou FTS4. As classes anotadas com @Entity agora podem ser anotadas com @Fts3 ou @Fts4 para declarar uma classe com uma tabela de pesquisa de texto completo de mapeamento. As opções de FTS para personalização mais detalhada estão disponíveis por meio dos métodos da anotação.
  • Views: a Room agora é compatível com a declaração de uma classe como uma consulta armazenada, também conhecida como view, usando a anotação @DatabaseView.
  • Corrotinas: os métodos DAO agora podem ser funções suspensas. Inclua room-ktx nas suas dependências para usar essa funcionalidade. O artefato ktx também fornece a função de extensão RoomDatabase.withTransaction para realizar transações de banco de dados em uma corrotina.
  • Valor automático: a Room agora é compatível com a declaração de classes com a anotação AutoValue como entidades e POJOs. As anotações da Room @PrimaryKey, @ColumnInfo, @Embedded e @Relation agora podem ser declaradas nos métodos abstratos de uma classe anotada de valor automático. Essas anotações também precisam ser acompanhadas por @CopyAnnotations para que a Room as entenda corretamente.
  • Suporte assíncrono adicional: métodos DAO anotados com @Insert, @Delete ou @Update, com @Query contendo INSERT, DELETE ou UPDATE, agora são compatíveis com tipos de retorno Rx Completable, Single, Maybe e o tipo de retorno de Guava ListenableFuture e também podem ser funções de suspensão.
  • enableMultiInstanceInvalidation: é uma nova API em RoomDatabase.Builder para ativar a invalidação em várias instâncias de RoomDatabase usando o mesmo arquivo de banco de dados.
  • fallbackToDestructiveMigrationOnDowngrade é uma nova API em RoomDatabase.Builder para recriar automaticamente o banco de dados caso ocorra um downgrade.
  • ignoredColumns é uma nova API na anotação @Entity que pode ser usada para listar campos ignorados por nome.
  • Agora, a Room usará corretamente o construtor principal do Kotlin nas classes de dados, evitando a necessidade de declarar as propriedades como vars.

Versão 2.1.0-rc01

29 de maio de 2019

Correções de bugs

  • Correção de um erro de inicialização da Room que pode ocorrer devido a uma configuração de temp_store já definida. b/132602198, link em inglês.
  • Correção de um aviso do uso de dupla citação para usuários com o SQLite 3.27.0 e posterior. b/131712640, link em inglês.
  • Correção de um bug em que o InvalidationTracker causava uma falha quando várias verificações de invalidação ocorriam em paralelo. b/133457594, link em inglês.

Versão 2.1.0-beta01

7 de maio de 2019

Lançamento do androidx.room 2.1.0-beta01 sem alterações do 2.1.0-alpha07. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Versão 2.1.0-alpha07

25 de abril de 2019

Mudanças de API / comportamento

  • A função de extensão RoomDatabase.withTransaction foi modificada para não usar mais um bloco de funções com um CoroutineScope como receptor. Isso evita que o wrapper coroutineScope { } extra necessário para determinadas execuções simultâneas no bloco de transações seja ignorado.

Correções de bugs

  • Correção de um bug em que a Room não correspondia a um TypeConversor para uma função DAO do Kotlin contendo um parâmetro do tipo de coleção. b/122066791, link em inglês.

Versão 2.1.0-alpha06

22 de março de 2019

Mudanças de API / comportamento

  • As consultas de transação assíncrona agora são serializadas, de modo que a Room não utilizará mais de uma linha de execução para transações de banco de dados. RoomDatabase.Builder.setTransactionExecutor(Executor) foi adicionado para permitir a configuração do executor a ser usado para transações.
  • RoomDatabase.runInTransaction(Callable) não incluirá mais as exceções verificadas em RuntimeExceptions. b/128623748, link em inglês.

Correções de bugs

  • Correção de um bug em que o rastreador de invalidação parava de observar uma tabela de conteúdo se observadores da tabela de conteúdo e de tabela FTS de conteúdo externo fossem adicionados. b/128508917, link em inglês.
  • Atualização da gramática SQLite da Room para corresponder ao SQLite 3.24.0. b/110883668, link em inglês.

Versão 2.1.0-alpha05

13 de março de 2019

Novos recursos

  • A função de extensão RoomDatabase.withTransaction permite realizar transações seguras de banco de dados em uma corrotina. As funções de extensão da Room, assim como a compatibilidade com corrotinas, estão disponíveis no artefato room-ktx.
  • Métodos DAO não abstratos anotados com @Transaction agora podem ser funções de suspensão. b/120241587

Mudanças de API / comportamento

  • Renomeação das room-coroutines de artefato para room-ktx, seguindo a mesma nomeação de outros artefatos do AndroidX.
  • beginTransaction, setTransactionSuccessful e endTransaction em RoomDatabase foram marcados como obsoletos em favor de runInTransaction e da função de extensão room-ktx withTransaction.

Correções de bugs

  • Correção de um bug em que os argumentos do tokenizer estavam sendo descartados se o tokenizer usado fosse SIMPLE. b/125427014
  • Correção de um bug em que a Room não identificava corretamente as funções de suspensão com parâmetros cujo tipo era uma classe interna. b/123767877
  • Correção de um bug em que o método DAO @Query adiado com instruções INSERT, UPDATE ou DELETE preparava atentamente a consulta no thread principal. b/123695593
  • Correção de vários bugs em que a Room gerava código incorreto para determinadas funções de suspensão. b/123466702 e b/123457323
  • Correção de um bug em que o uso obsoleto de métodos não era suprimido corretamente no código gerado. b/117602586
  • Atualização da dependência da Room do androidx.sqlite para a versão 1.0.2, que contém correções para gerenciar corretamente bancos de dados corrompidos. b/124476912

Problemas conhecidos

  • A Room 2.1.0-alpha05 depende do artefato kotlinx-metadata-jvm, que não está disponível no momento no Maven Central (KT-27991). Essa dependência pode ser resolvida com a adição de maven { url "https://kotlin.bintray.com/kotlinx/" } aos repositórios de projeto.

Versão 2.1.0-alpha04

25 de janeiro de 2019

Novos recursos

  • Métodos DAO anotados com @Query contendo instruções INSERT, UPDATE ou DELETE agora podem retornar tipos assíncronos Single, Mayble, Completable e ListenableFuture. Além disso, eles também podem ser funções suspensas. b/120227284

Mudanças de API / comportamento

  • A Room gerará um erro se um método DAO não abstrato anotado com @Transaction retornar um tipo assíncrono como Single, Mayble, Completable, LiveData ou ListenableFuture. Como as transações são confinadas pelo thread, atualmente é impossível para a Room iniciar e finalizar uma transação em torno de uma função que pode realizar consultas em diferentes threads. b/120109336
  • OnConflictStrategy.FAIL e OnConflictStrategy.ROLLBACK foram @Deprecated, porque não se comportam como esperado com as vinculações SQLite atuais do Android. b/117266738

Correções de bugs

  • Correção de um bug em que a Room não usava corretamente o TypeConverter de um tipo de retorno se o método DAO fosse uma função de suspensão. b/122988159
  • Correção de um bug em que a Room identificava incorretamente as funções de suspensão herdadas como funções que não são de suspensão. b/122902595
  • Correção de um bug em que a Room gerava código incorreto quando um campo @Embedded estava em uma classe pai e era usado em várias classes filhas. b/121099048
  • Correção de um problema em que o banco de dados gerava um impasse ao invocar funções DAO suspensas entre uma beginTransaction() e uma endTransaction(). b/120854786

Versão 2.1.0-alpha03

4 de dezembro de 2018

Mudanças na API

  • O tokenizer FTS em @Fts3/@Fts4 agora usa uma String em vez de um Enum. Isso permite que tokenizers personalizados sejam usados pela Room. Os tokenizers integrados ainda são definidos em FtsOptions como constantes de string. b/119234881

Novos recursos

  • Corrotinas: os métodos DAO agora podem ser funções suspensas. Para compatibilidade com funções de suspensão na Room, foi lançado um novo artefato, room-coroutines. b/69474692
  • Os métodos DAO anotados com @Insert, @Delete ou @Update agora são compatíveis com ListenableFuture como tipo de retorno. b/119418331

Correções de bugs

  • Correção de um bug em que a Room tentava incorretamente encontrar um construtor com colunas na propriedade ignoredColumns de @Entity b/119830714
  • Correção de um bug em que a Room não marcava os parâmetros do método DAO como finais na implementação gerada. b/118015483
  • Correção de um bug em que o processador da Room falhava ao relatar um erro em uma consulta com símbolos especiais. b/119520136
  • Correção de um bug em que a Room recusava diversas outras implementações Collection como argumentos de uma expressão IN b/119884035
  • Correção de um bug em que o LiveData retornado da Room receberia lixo coletado quando observado para sempre, fazendo com que ele deixasse de emitir novos dados. b/74477406
  • Atualização do bloqueio de fechamento do RoomDatabase para reduzir a contenção de bloqueio. b/117900450

Versão 2.1.0-alpha02

30 de outubro de 2018

Novos recursos

  • Adição de compatibilidade para fazer referência a @DatabaseView em um @Relation. b/117680932

Correções de bugs

  • Correção de um bug em que a Room executava E/S de disco no encadeamento principal ao assinar e descartar um tipo de retorno Rx. b/117201279
  • Correção de um bug em que a Room não conseguia encontrar um conversor de tipo apropriado para um campo em uma classe de entidade Kotlin. b/111404868
  • Correção de um bug em que a Room gerava código incorreto para uma implementação da interface DAO que continha um método padrão de Kotlin que não tinha argumentos. b/117527454
  • Atualização do analisador de gramática do SQLite da Room, corrigindo um problema de desempenho que causaria longos tempos de compilação. b/117401230

Versão 2.1.0-alpha01

8 de outubro de 2018

Novos recursos

  • FTS: a Room agora é compatível com entidades com uma tabela de mapeamento FTS3 ou FTS4. As classes anotadas com @Entity agora podem ser anotadas com @Fts3 ou @Fts4 para declarar uma classe com uma tabela de pesquisa de texto completo de mapeamento. Opções de FTS para personalização adicional estão disponíveis por meio dos métodos da anotação. b/62356416
  • Views: a Room agora é compatível com a declaração de uma classe como consulta armazenada, também conhecida como view, usando a anotação @DatabaseView. b/67033276
  • Valor automático: a Room agora é compatível com a declaração de classes com a anotação AutoValue como entidades e POJOs. As anotações da Room @PrimaryKey, @ColumnInfo, @Embedded e @Relation agora podem ser declaradas nos métodos abstratos de uma classe anotada de valor automático. Essas anotações também precisam ser acompanhadas por @CopyAnnotations para a Room para entendê-los corretamente. b/62408420
  • Compatibilidade com outros tipos de retorno Rx: métodos do DAO anotados com @Insert, @Delete ou @Update agora são compatíveis com os tipos de retorno Rx Completable, Single<T> e Maybe<T>. b/63317956
  • Tipos imutáveis com @Relation: a Room antes exigia que os campos anotados @Relation fossem configuráveis, mas agora podem ser parâmetros do construtor.
  • enableMultiInstanceInvalidation: é uma nova API em RoomDatabase.Builder para ativar a invalidação em várias instâncias de RoomDatabase usando o mesmo arquivo de banco de dados. Esse mecanismo de invalidação de várias instâncias também funciona em vários processos. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: é uma nova API em RoomDatabase.Builder para recriar automaticamente o banco de dados em caso de downgrade. b/110416954
  • ignoredColumns: é uma nova API na anotação @Entity que pode ser usada para listar campos ignorados por nome. Útil para ignorar campos herdados em uma entidade. b/63522075

Mudanças de API / comportamento

  • mCallback e mDatabase em RoomDatabase agora são @Deprecated e serão removidos na próxima versão principal da Room. b/76109329

Correções de bugs

  • Correção de dois problemas em que a Room não se recuperava corretamente de um banco de dados corrompido ou de uma migração incorreta durante a inicialização. b/111504749 e b/111519144
  • A Room agora usará corretamente o construtor principal do Kotlin em classes de dados, evitando a necessidade de declarar os campos como vars. b/105769985

Versão 2.0.0

Versão 2.0.0

1º de outubro de 2018

androidx.room 2.0.0 é lançado sem mudanças desde a versão 2.0.0-rc01.

Versão 2.0.0-rc01

20 de setembro de 2018

Lançamento do androidx.room 2.0.0-rc01 sem alterações desde o 2.0.0-beta01.

Versão 2.0.0-beta01

2 de julho de 2018

Mudanças de API / comportamento

  • Adição de RoomDatabase.Builder.setQueryExecutor() para permitir a personalização do local em que as consultas são executadas.
  • Adição de RxJava2 Observable para oferecer compatibilidade
  • As implementações de DAO e de banco de dados geradas agora são finais.

Correções de bugs

  • Especificação da classe/nome do campo no erro "não é possível encontrar o getter para o campo". b/73334503
  • Correção da retrocompatibilidade de RoomOpenHelper com versões anteriores da Room. b/110197391

Dependências anteriores ao AndroidX

Para as versões da Room anteriores ao AndroidX, inclua estas dependências:

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

Versão 1.1.1

Versão 1.1.1

19 de junho de 2018

A Room 1.1.1 é idêntica à Room 1.1.1-rc1.

Versão 1.1.1-rc1

16 de maio de 2018 É altamente recomendável usar a Room 1.1.1-rc1 em vez de 1.1.0 se você estiver usando migrações.

Correção de um bug em que a Room não tratava corretamente a inicialização pós-migração. b/79362399

Versão 1.1.0

Versão 1.1.0-beta3

19 de abril de 2018

Correções de bugs

  • Correção de erro de compilação quando um POJO do Kotlin faz referência a uma entidade relacional que foi definida no Java. b/78199923, link em inglês.

Versão 1.1.0-beta2

5 de abril de 2018

Correções de bugs

  • Correção de um bug crítico nas implementações Single e Maybe Rx da Room, em que a consulta era reciclada antecipadamente, causando problemas se você adicionasse mais de um observador às instâncias Single ou Maybe retornadas. b/76031240, link em inglês.

  • [RoomDatabase.clearAllTables][ref-clearAllTables] não VACUUM o banco de dados se for chamado dentro de uma transação. b/77235565, link em inglês.

Versão 1.1.0-beta1

21 de março de 2018

Mudanças na API

  • Com base no feedback da Revisão da API, @RawQuery não aceita mais a transmissão de uma String como parâmetro de consulta. Você precisa usar [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (consulte [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] para criar facilmente uma instância de [SupportSQLiteQuery][ref-SupportSQLiteQuery] com compatibilidade a argumentos).
  • O método [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] do RoomDatabase.Builder agora aceita vararg int, em vez de vararg Integer.

Correções de bugs

  • Agora, [RoomDatabase.clearAllTables][ref-clearAllTables] tenta retornar espaço para o sistema operacional definindo um checkpoint WAL e realizando VACUUM no banco de dados.
  • Agora, [@RawQuery][ref-RawQuery] aceita qualquer Pojo para a propriedade observedEntities, desde que ele faça referência a uma ou mais entidades por meio dos campos Embedded ou Relations. b/74041772, link em inglês.
  • Paging: a implementação de DataSource da Room agora lida corretamente com dependências de várias tabelas (como relações e mesclagens). Anteriormente, essas falhas não acionavam novos resultados ou poderia ocorrer falha de compilação. b/74128314, link em inglês.

Versão 1.1.0-alpha1

22 de janeiro de 2018

Novos recursos

  • RawQuery: essa nova API permite que os métodos @Dao recebam o SQL como um parâmetro de consulta b/62103290, b/71458963, links em inglês.
  • fallBackToDestructiveMigrationsFrom: essa nova API em RoomDatabase.Builder proporciona um controle mais refinado, com que as migrações destrutivas de versões iniciais do esquema são permitidas (em comparação com fallbackToDestructiveMigration) b/64989640 (link em inglês).
  • A Room agora é compatível apenas com as APIs mais recentes do Paging (Alfa-4 ou posterior), perdendo a compatibilidade com o LivePagedListProvider obsoleto. Para usar a nova Room Alfa, é necessário usar a Paging alpha-4 ou mais recente e mudar do LivePagedListProvider para o LivePagedListBuilder, se ainda não tiver feito isso.

Correções de bugs

  • Compatibilidade aprimorada para os tipos Kotlin Kapt. b/69164099
  • A ordem dos campos não invalida mais o esquema. b/64290754