Room

Room 永続ライブラリは SQLite 全体に抽象化レイヤを提供することで、データベースへのより安定したアクセスを可能にし、SQLite を最大限に活用できるようにします。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2023 年 2 月 22 日 2.5.0 - - -

依存関係の宣言

Room への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

Room の依存関係には、Room による移行のテストRoom RxJava が含まれます。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

Groovy

dependencies {
    def room_version = "2.5.0"

    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.5.0"

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

Kotlin 拡張機能の使用方法については、ktx のドキュメントをご覧ください。

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

Android 以外のライブラリ(Java または Kotlin のみの Gradle モジュールなど)の場合は、必要に応じて androidx.room:room-common を利用して Room アノテーションを使用できます。

コンパイラ オプションの構成

Room のアノテーション プロセッサ オプションは次のとおりです。

  • room.schemaLocation: 指定するディレクトリの JSON ファイルにデータベース スキーマをエクスポートするように設定し、有効にします。詳しくは、Room の移行に関する説明をご覧ください。
  • room.incremental: Gradle の増分アノテーション プロセッサを有効にします。

これらのオプションを設定する方法の例を、次のコード スニペットに示します。

Groovy

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

Kotlin

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "room.schemaLocation" to "$projectDir/schemas",
                    "room.incremental" to "true"
                )
            }
        }
    }
}

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 2.5.0

バージョン 2.5.0

2023 年 2 月 22 日

androidx.room:room-paging-guava:2.5.0androidx.room:room-paging-rxjava2:2.5.0androidx.room:room-paging-rxjava3:2.5.0 がリリースされました。バージョン 2.5.0 に含まれる commit については、こちらをご覧ください

バージョン 2.5.0

2023 年 1 月 11 日

androidx.room:room-*:2.5.0 がリリースされました。バージョン 2.5.0 に含まれる commit については、こちらをご覧ください

2.4.0 以降の重要な変更

  • room-runtime ソースはすべて Java から Kotlin に変換されました。Kotlin へのライブラリ変換のためにコードが Kotlin の場合にソースの互換性がなくなる問題が発生する可能性があります。たとえば、既知のソース互換性のない変更として、InvalidationTracker ではタイプが MutableSet ではなく Set のパラメータを設定するため ObserveronInvalidate() を宣言することが必要になりました。さらに、特定の getter メソッドが、Kotlin ファイルでプロパティ アクセス構文を必要とするプロパティに変換されました。重大な非互換性エラーが生じた場合は、バグを報告してください。
  • 新しいショートカット アノテーション @Upsert を追加しました。このアノテーションは、一意性の競合がない場合にエンティティを挿入し、競合がある場合はエンティティの更新を試みます。(I7aaabb/241964353
  • Room ページングでのサポートのために新しい room-paging アーティファクト room-paging-rxjava2room-paging-rxjava3room-paging-guava を追加しました。
  • @MapInfo で曖昧さ回避のために Key-Value テーブル名を指定するための API を追加しました。(Icc4b5

バージョン 2.5.0-rc01

2022 年 12 月 7 日

androidx.room:room-*:2.5.0-rc01 がリリースされました。バージョン 2.5.0-rc01 に含まれる commit については、こちらをご覧ください

  • このリリースは 2.5.0-beta02 と同一です。

バージョン 2.5.0-beta02

2022 年 11 月 9 日

androidx.room:room-*:2.5.0-beta02 がリリースされました。バージョン 2.5.0-beta02 に含まれる commit については、こちらをご覧ください

API の変更

  • Java の配列の動作と一致するように、不変(Array<Any?>)から反変(Array<out Any?>)まで、クエリ引数を受け取るさまざまな API を修正しました。(b/253531073

バージョン 2.5.0-beta01

2022 年 10 月 5 日

androidx.room:room-*:2.5.0-beta01 がリリースされました。バージョン 2.5.0-beta01 に含まれる commit については、こちらをご覧ください

API の変更

  • @Upsert をサポートする最小バージョンを API 16 に制限します。古い API では、主キーの制約の競合を識別できないためです。(I5f67fb/243039555

バグの修正

  • シャドウ テーブルがスキーマ .json ファイルに誤ってエクスポートされた場合に破損する問題を修正しました。(I4f83bb/246751839

バージョン 2.5.0-alpha03

2022 年 8 月 24 日

androidx.room:room-*:2.5.0-alpha03 がリリースされました。バージョン 2.5.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • 新しいショートカット アノテーション @Upsert を追加しました。このアノテーションは、一意性の競合がない場合にエンティティを挿入し、競合がある場合はエンティティの更新を試みます。(I7aaabb/241964353

バグの修正

  • 自動移行の外部キー制約の確認の際に、Room が IllegalStateException ではなく SQLiteConstraintException をスローするようになりました。(I328dd
  • getOpenHelpergetQueryExecutorgetTransactionExecutor のゲッター / プロパティに関する Kotlin ソースの互換性のない変更を修正しました。(Iad0ac

バージョン 2.5.0-alpha02

2022 年 6 月 1 日

androidx.room:room-*:2.5.0-alpha02 がリリースされました。バージョン 2.5.0-alpha02 に含まれる commit については、こちらをご覧ください

新機能

  • Room ページングでの新しい room-paging アーティファクト room-paging-rxjava2room-paging-rxjava3room-paging-guava のサポートを追加しました。(41a1d4b/203666906)、(eb6098b/203666906)、(1b9ae4b/203666906

API の変更

  • room-runtime はすべて Java から Kotlin に変換されました。(If2069b/206859668)、(Ie4b55b/206859668)、(I697eeb/206859668)、(I96c25b/206859668

    注: Kotlin へのライブラリ変換のため、ソースの互換性がなくなる問題が発生するおそれがあります。コードを Kotlin で記述していて、Room の古いバージョンを呼び出す場合は、新しいバージョンでこれらのケースを処理する必要があります。たとえば、既知のソース互換性のない変更として、InvalidationTracker ではタイプが MutableSet ではなく Set のパラメータを設定するため ObserveronInvalidate() を宣言することが必要になりました。

  • @MapInfo で曖昧さ回避のために Key-Value テーブル名を指定するための API を追加しました。(Icc4b5
  • プロパティ ゲッターで @Ignore を再度許可するようにソースの互換性の問題を修正しました。(Ifc2fb

バグの修正

  • 重複する列の解決ヒューリスティック アルゴリズム。Room はマルチマップ クエリで曖昧な列の解決を試みるようになりました。これにより、結果データ オブジェクトに正しくマッピングされるよう同じ名前の列を含むテーブルとの JOIN が可能になりました。(I4b444b/201306012b/212279118

バージョン 2.5.0-alpha01

2022 年 2 月 23 日

androidx.room:room-*:2.5.0-alpha01 がリリースされました。バージョン 2.5.0-alpha01 に含まれる commit については、こちらをご覧ください

API の変更

  • Kotlin ソースで Room @IntDef の使用が適用されない問題を修正しました。(I75f41b/217951311
  • プロパティ ゲッターで @Query を再度許可するようにソースの互換性の問題を修正しました。(I0a09b
  • room-common を Java から Kotlin に変換しました。(I69c48b/206858235

    注: Kotlin へのライブラリ変換中に、一部のプロパティがコンパニオン オブジェクトに移動されたため、ソースの互換性がなくなる問題が発生するおそれがあります。コードを Kotlin で記述していて、Room の古いバージョンを呼び出す場合、新しいバージョンではこれらのプロパティにアクセスする際に「.Companion」サフィックスが必要になります。

  • room-migration を Java から Kotlin に変換しました。(I2724bb/206858622
  • room-runtime 内の paging 関連ファイルを Java から Kotlin に変換しました。(I82fc8b/206859668
  • FrameworkSQLite* レベルでのマルチプロセス ロックと使用のための API を追加し、マルチプロセスの最初のデータベース作成と移行を保護するようにしました。(Ied267b/193182592

バグの修正

  • Kotlin ソースの内部プロパティのサポートを追加しました。これは Room の軽微な動作変更で、ゲッター / セッターとしてプロパティと一致させるときに関数のソース名を使用するようになります(以前は、内部の関数 / プロパティによって異なる関数の JVM 名を使用していました)。カスタムの @JvmName アノテーションを使用してゲッター / セッターをプライベート プロパティと一致させている場合は、更新後に生成されたコードを再確認してください(If6531b/205289020

バージョン 2.4.3

バージョン 2.4.3

2022 年 7 月 27 日

androidx.room:room-*:2.4.3 がリリースされました。バージョン 2.4.3 に含まれる commit については、こちらをご覧ください

バグの修正

  • Kotlin 1.7 で Room が suspend 関数を認識しない問題を修正しました(b/236612358

バージョン 2.4.2

バージョン 2.4.2

2022 年 2 月 23 日

androidx.room:room-*:2.4.2 がリリースされました。バージョン 2.4.2 に含まれる commit については、こちらをご覧ください

バグの修正

  • -Xjvm-default=all またはそれと同等のものを使用したコンパイルによってデフォルト インターフェース メソッドを生成する本文を含む Dao @Transaction suspend 関数のコードを生成する際の問題を修正しました。(Ia4ce5
  • Room が戻り値の型 Array<ByteArray> のクエリメソッドのコードを生成するバグを修正しました。(If086eb/213789489

バージョン 2.4.1

バージョン 2.4.1

2022 年 1 月 12 日

androidx.room:room-*:2.4.1 がリリースされました。バージョン 2.4.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • Kotlin ソースの内部プロパティのサポートを追加しました。これは Room の軽微な動作変更で、ゲッター / セッターとしてプロパティと一致させるときに関数のソース名を使用するようになります(以前は、内部の関数 / プロパティによって異なる関数の JVM 名を使用していました)。カスタムの @JvmName アノテーションを使用してゲッター / セッターをプライベート プロパティと一致させている場合は、更新後に生成されたコードを再確認してください(If6531b/205289020

バージョン 2.4.0

バージョン 2.4.0

2021 年 12 月 15 日

androidx.room:room-*:2.4.0 がリリースされました。バージョン 2.4.0 に含まれる commit については、こちらをご覧ください

2.3.0 以降の重要な変更

  • 自動移行: スキーマがエクスポートされている間、自動的に移行を生成するための API を Room が提供するようになりました。自動移行の生成が必要であることを Room に通知するには、新しいプロパティ @Database#autoMigrations を使用して、自動移行の移行元と移行先のバージョンを宣言できます。テーブルや列の名前の変更や削除に関する追加情報が Room に必要な場合、@AutoMigration アノテーションでそのような入力を含む仕様クラスを宣言できます。詳しくは、@AutoMigration のドキュメントをご覧ください。
  • 自動移行での依存関係の注入: @ProvidedAutoMigrationSpec は、AutoMigrationSpec が実行時に RoomDatabase.Builder#addAutoMigrationSpec() を介して提供されることを宣言するための新しい API です。これにより、依存関係の注入フレームワークで複雑な依存関係が必要な場合に、そのような仕様を提供できます。
  • 自動移行の移行テストヘルパーのサポート: テスト対象のデータベース クラスを受け取る新しいコンストラクタ API を提供することで自動移行をサポートするように、Room の MigrationTestHelper が更新されました。これにより、ヘルパーは runMigrationsAndValidate 中に同じ方法で自動移行を自動的に追加できます。
  • Room ページングのサポート: androidx.room:room-paging がリリースされました。これにより、androidx.paging.PagingSource を返す Room クエリで Paging 3.0 がネイティブにサポートされます。
  • リレーショナル クエリ メソッド: Room で、JOIN ステートメントに役立つ、マルチマップを戻り値の型とする @Dao メソッドがサポートされるようになりました。サポートされているマルチマップの型は、MapSparseArrayLongSparseArray と、Guava の ImmutableMapImmutableSetMultimapImmutableListMultimap です。

バージョン 2.4.0-rc01

2021 年 12 月 1 日

androidx.room:room-*:2.4.0-rc01 がリリースされました。バージョン 2.4.0-rc01 に含まれる commit については、こちらをご覧ください

新機能

  • Kotlin 1.6 をサポートするよう、KSP に対する Room の依存関係を 1.6.0-1.0.1 に更新しました。

バージョン 2.4.0-beta02

2021 年 11 月 17 日

androidx.room:room-*:2.4.0-beta02 がリリースされました。バージョン 2.4.0-beta02 に含まれる commit については、こちらをご覧ください

新機能

  • @MapInfo に SparseArray と LongSparseArray のサポートを追加しました。(Ic91a2b/138910317

バグの修正

  • 型の null 可能性情報を考慮する新しい TypeConverter アナライザを追加しました。この情報は KSP でしか利用できないため、KSP でのみデフォルトでオンになっています。問題が発生する場合は、room.useNullAwareTypeAnalysis=false をアノテーション プロセッサに渡すことでオフにできます。その場合、このフラグは今後に削除される予定であるためバグを報告してください。この新しい TypeConverter アナライザには null チェックでラップする機能があるため、null を受け取らない TypeConverter のみを提供することをおすすめします。なお、アノテーション プロセッサとして KAPT または Java を使用しているユーザーは(KSP とは異なり)型に null 可能性情報がないため影響がありません。(Ia88f9b/193437407
  • FTS エンティティが ICU トークナイザーの使用を宣言した場合に、Room がコンパイルに失敗し、SQL エラーが発生するバグを修正しました。(I00db9b/201753224
  • バージョン間で埋め込まれたエンティティに新しい列が追加されるという自動移行の問題を解決しました。(I5fcb1b/193798291
  • LEFT JOIN クエリでのリレーショナル クエリ メソッドの戻り値の型に関する問題を解決しました。今回の変更により、1 対多のマッピングが存在する場合、無効な値オブジェクトは、カーソル内にない場合にキーに対して返されるコレクションに含まれなくなります。有効な値がない場合、キーは空のコレクションにマッピングされます。(Id5552b/201946438
  • SQLite キーワードを列名でエスケープできない自動移行の問題を解決しました。(Idbed4b/197133152

バージョン 2.4.0-beta01

2021 年 10 月 13 日

androidx.room:room-*:2.4.0-beta01 がリリースされました。バージョン 2.4.0-beta01 に含まれる commit については、こちらをご覧ください

バグの修正

  • 同じ自動移行内の別のテーブルにも同じ名前の新しい列がある場合、自動移行で新しい列が追加されない問題を修正しました。(Ia5db5b/200818663
  • room-paging によって生成された PagingSource 実装が、以前の Dispatchers.IO ではなく、RoomDatabase.Builder を介して渡された queryExecutor を使用するようになったため、オーバーライドできるようになりました。(Iae259

バージョン 2.4.0-alpha05

2021 年 9 月 29 日

androidx.room:room-*:2.4.0-alpha05 がリリースされました。バージョン 2.4.0-alpha05 に含まれる commit については、こちらをご覧ください

新機能

API の変更

  • デベロッパーが組み込みの Enum および UUID コンバータを無効にできるように、TypeConverter アノテーションに新しいプロパティを追加しました。これらのコンバータはデフォルトでオンになっていますが、特定のスコープまたはデータベース全体で無効にできます。詳しくは、TypeConverter のドキュメントをご覧ください。(36ae9eb/195413406

  • @MapInfo アノテーションにより、DAO のマルチマップ戻り値型について POJO 以外のキー / 値をサポートします。(I4d704

マップのキーまたは値の列が単一の列に由来する場合は、@MapInfo が必要になります。次の例をご覧ください。

@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>
  • Room で Paging3 を使用する場合は、room-paging が必須アーティファクトになります。(Ieaffe

バグの修正

  • マップのキーからの列の ORDER BY 句がクエリに含まれている場合に、マルチマップ クエリの結果が正しく並べ替えられなかった問題を修正しました。(I6b887

外部からの協力

  • @Index でインデックス順序を指定する新しい API を追加しました。Nikita Zhelonkin 氏に感謝いたします。(I033fc

バージョン 2.4.0-alpha04

2021 年 7 月 21 日

androidx.room:room-*:2.4.0-alpha04 がリリースされました。バージョン 2.4.0-alpha04 に含まれる commit については、こちらをご覧ください

新機能

  • Room で、JOIN ステートメントに役立つ、マルチマップを戻り値の型とする @Dao メソッドがサポートされるようになりました。サポートされているマルチマップの型は、Map と、Guava の ImmutableMapImmutableSetMultimapImmutableListMultimap です。

    以下に、マルチマップ クエリの例を示します。

    1 対 1 関係のマップ

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

    1 対多関係のマップ(標準のマルチマップ)

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

    マルチマップの結果は、サポートされている非同期の戻り値の型(LiveData、Rx の Observable、コルーチン Flow など)でラップすることもできます。

Room ページング

  • androidx.room:room-paging がリリースされました。これにより、androidx.paging.PagingSource を返す Room クエリで Paging 3.0 がネイティブにサポートされます。

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • このアーティファクトは、Room によって生成された androidx.paging.PagingSource の実装を、Paging 3.0 API 上に構築された実装に置き換えます。新しい PagingSource の実装ではキーの解析方法が異なっているため、Room の PagingSource に手動で指定するキーは、Pager のコンストラクタで渡される initialKey を含め、この動作変更に対応する必要があります。ページの読み込みは Key から開始されます(Key は最初に読み込まれるアイテムとなります)。これは、LoadParams.Refresh.Key がユーザーのスクロール位置として扱われ、キーの前後でアイテムがロードされる既存の動作とは異なります。

  • このアーティファクトはオプションです。オプトアウトすると、Room 2.3 で導入された Paging 3.0 の既存のサポートにフォールバックします。ただし、今後のリリースで Paging 3.0 で Room を使用している場合は、このアーティファクトはオプションではなくなります。オプトインするには、新しい room-paging アーティファクトをクラスパスに追加してください。Gradle を使用している場合は、次のスニペットを build.gradle に追加します。

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

バグの修正

  • 外部キー違反の処理に関する自動移行で問題を修正しました。(b/190113935

バージョン 2.4.0-alpha03

2021 年 6 月 16 日

androidx.room:room-*:2.4.0-alpha03 がリリースされました。バージョン 2.4.0-alpha03 に含まれる commit については、こちらをご覧ください

API の変更

  • Room の MigrationTestHelper を更新し、テスト対象のデータベース クラスを受け取る新しいコンストラクタ API を提供することにより、自動移行をサポートするようにしました。これにより、ヘルパーは runMigrationsAndValidate 中に同じ方法で自動移行を自動的に追加できます。

バグの修正

  • Room の SQLite ネイティブ ライブラリに関する問題を修正し、Apple の M1 チップをサポートするようにしました。(b/174695268

  • @Transaction 関数の戻り値の型が Flow だったときに Room がエラーを表示しない問題を修正しました(I56dddb/190075899

  • インデックスに関連する自動移行の問題を修正しました。(b/177673291

依存関係の更新

  • Room の KSP サポートが KSP 1.5.10-1.0.0-beta01 に依存するようになりました。(1ecb11b/160322705

バージョン 2.4.0-alpha02

2021 年 5 月 5 日

androidx.room:room-*:2.4.0-alpha02 がリリースされました。バージョン 2.4.0-alpha02 に含まれる commit については、こちらをご覧ください

API の変更

  • @ProvidedAutoMigrationSpec は、AutoMigrationSpec が実行時に RoomDatabase.Builder#addAutoMigrationSpec() を介して提供されることを宣言するための新しい API です。これにより、依存関係の注入フレームワークで複雑な依存関係が必要な場合に、そのような仕様を提供できます。

バグの修正

  • @DatabaseView が正しく再作成されない自動移行の問題を修正しました。

外部からの協力

  • Room の JournalMode.TRUNCATE で、たまに InvalidationTracker コールバックの呼び出しが無効になったり、遅すぎたり、またはまったく発生しなかったりする問題を修正しました。Uli Bubenheimer | bubenheimer@users.noreply.github.com に感謝いたします(b/154040286

バージョン 2.4.0-alpha01

2021 年 4 月 21 日

androidx.room:room-*:2.4.0-alpha01 がリリースされました。バージョン 2.4.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • 自動移行: スキーマがエクスポートされている間、自動的に移行を生成するための API を Room が提供するようになりました。自動移行の生成が必要であることを Room に通知するには、新しいプロパティ @Database#autoMigrations を使用して、自動移行の移行元と移行先のバージョンを宣言できます。テーブルや列の名前の変更や削除に関する追加情報が Room に必要な場合、@AutoMigration アノテーションでそのような入力を含む仕様クラスを宣言できます。詳しくは、@AutoMigration のドキュメントをご覧ください。

バグの修正

  • defaultValue に余分なかっこが含まれる場合、Room のスキーマ検証によって正しく検証されない問題を修正しました。(b/182284899

バージョン 2.3.0

バージョン 2.3.0

2021 年 4 月 21 日

androidx.room:room-*:2.3.0 がリリースされました。バージョン 2.3.0 に含まれる commit については、こちらをご覧ください

2.2.0 以降の重要な変更

  • 組み込みの列挙型のサポート: 型コンバータが提供されなかった場合、Room はデフォルトで列挙型から文字列型へ(およびその逆)の型コンバータを使用するようになりました。列挙型用の型コンバータがすでに存在する場合、Room はデフォルトの型コンバータよりそちらを優先的に使用します。
  • クエリ コールバック: Room は、クエリを実行する直前に利用できる一般的なコールバック API RoomDatabase.QueryCallback を提供するようになりました。これは、デバッグビルドのロギングに役立ちます。このコールバックは RoomDatabase.Builder#setQueryCallback() を介して設定できます。
  • あらかじめパッケージ化されたデータベースへの対応: Room に、入力ストリームから読み込まれた、あらかじめパッケージ化されたデータベースを使用してデータベースを作成するための API が追加されました。これにより、あらかじめパッケージ化されたデータベースが gzip で圧縮されている場合などに対応できます。
  • 型コンバータの提供: Room に、アプリが初期化を制御できるように、型コンバータのインスタンスを提供するための API が追加されました。Room に提供される型コンバータにマークを付けるには、新しいアノテーション @ProvidedTypeConverter を使用します。
  • RxJava3 のサポート: Room で RxJava3 の型がサポートされるようになりました。RxJava2 と同様に、戻り値の型が Flowable、Single、Maybe、Completable の DAO メソッドを宣言できます。また、RxJava3 をサポートする新しいアーティファクト androidx.room:room-rxjava3 を使用できます。
  • Paging 3.0 のサポート: 戻り値の型が androidx.paging.PagingSource である、@Query アノテーション付きメソッドの実装の生成が Room でサポートされます。

バージョン 2.3.0-rc01

2021 年 3 月 24 日

androidx.room:room-*:2.3.0-rc01 がリリースされました。バージョン 2.3.0-rc01 に含まれる commit については、こちらをご覧ください

バグの修正

  • Room が作成したコルーチンの Flow クエリが停止されている withTransaction ブロックで消費されない問題を修正しました(I797bf)。

バージョン 2.3.0-beta03

2021 年 3 月 10 日

androidx.room:room-*:2.3.0-beta03 がリリースされました。バージョン 2.3.0-beta03 に含まれる commit については、こちらをご覧ください

新機能

  • KSP の増分コンパイルのサポートを追加しました。(I031c1b/176453350

バグの修正

  • メインスレッドで PagingSource を作成すると ANR が発生するバグを修正しました。(I42b74b/181221318
  • @ExperimentalRoomApi の公開設定がパッケージ プライベートではなく一般公開になる問題を修正しました。(b/181356119

外部からの協力

  • Room では、@SkipQueryVerification アノテーションが付いているときに、@Query アノテーション付きの DAO メソッドで POJO 戻り値の型が受け入れられるようになりました。Room は、@RawQuery アノテーション付きの DAO メソッドの場合と同じように、ベスト エフォートを行ってクエリの結果を POJO 戻り値の型に変換します。「Markus Riegel | hey@marcorei.com」に感謝いたします。(I45acb

バージョン 2.3.0-beta02

2021 年 2 月 18 日

androidx.room:room-*:2.3.0-beta02 がリリースされました。バージョン 2.3.0-beta02 に含まれる commit については、こちらをご覧ください

新機能

  • Room に Kotlin Symbol Processing KSP の試験運用版でのサポートが追加されました。

    KSP は Kotlin コンパイラでネイティブにアノテーション プロセッサを実行する KAPT に置き換わるもので、ビルド時間を大幅に短縮します。

    KSP で Room を使用するには、KSP Gradle プラグインを適用し、ビルドファイル内の kapt 構成を ksp に置き換えます。たとえば、kapt 'androidx.room:room-compiler:2.3.0-beta02' の代わりに ksp 'androidx.room:room-compiler:2.3.0-beta02' を使用します。詳しくは、KSP のドキュメントをご覧ください。

    なお、KSP は試験運用中のため、実稼働コードには KAPT を引き続き使用することをおすすめします。ビルド時間の短縮は、KAPT を使用するプロセッサが他にない場合にのみ適用されます。既知の問題については b/160322705 をご覧ください。

バージョン 2.3.0-beta01

2021 年 1 月 27 日

androidx.room:room-*:2.3.0-beta01 がリリースされました。バージョン 2.3.0-beta01 に含まれる commit については、こちらをご覧ください

新機能

  • 自動クローズ可能なデータベース: 一定の期間アクセスされなかったデータベースをクローズする機能が Room に導入されました。これは試験運用版の機能であり、有効にするには RoomDatabase.Builder#setAutoCloseTimeout() を呼び出します。この機能は、複数のデータベースを使用するアプリで役立ちます。

バグの修正

  • 異なる競合戦略が定義された複数の @Update または @Delete メソッドを使用する Dao メソッドが、そのうちの 1 つの戦略のみを使用してコードを生成し、定義された戦略を結果的に無視する問題を修正しました。(/I0b90db/176138543

バージョン 2.3.0-alpha04

2020 年 12 月 16 日

androidx.room:room-*:2.3.0-alpha04 がリリースされました。バージョン 2.3.0-alpha04 に含まれる commit については、こちらをご覧ください

新機能

  • Room は、クエリを実行する直前に利用できる一般的なコールバック API RoomDatabase.QueryCallback を提供するようになりました。これは、デバッグビルドのロギングに役立ちます。このコールバックは RoomDatabase.Builder#setQueryCallback() を介して設定できます。(Iaa513b/174478034b/74877608
  • 型コンバータが提供されなかった場合、Room はデフォルトで列挙型から文字列型へ(およびその逆)の型コンバータを使用するようになりました。列挙型用の型コンバータがすでに存在する場合、Room はデフォルトの型コンバータよりそちらを優先的に使用します。(b/73132006

既知の問題

  • 列挙型に対する読み取り用として一方向の型コンバータがすでに存在する場合、Room は組み込みの文字列型から列挙型への型コンバータを(使用すべきでなくても)誤って使用することがあります。これは既知の問題であり、型コンバータを双方向にすることで解決できます。b/175707691 を参照してください。

バグの修正

  • JDK の新しいバージョンで Room が増分アノテーション処理を誤って無効にする問題を修正しました。(b/171387388
  • 複数のクラスローダが使用されているときに Room が生成されたクラスを検出する問題を修正しました。修正にご協力いただいた「Serendipity | 892449346@qq.com」に感謝いたします。(b/170141113
  • Kotlin @Dao に汎用型が JVM のプリミティブである基本クラスが存在する場合に、Room が誤ったコードを生成する問題を修正しました。(b/160258066

外部からの協力

  • WAL モードが有効で API が 16 以上の場合、Room はデフォルトで beginTransactionNonExclusive を使用するようになりました。「Ahmed I. Khalil | ahmedibrahimkhali@gmail.com」に感謝いたします。(b/126258791

バージョン 2.3.0-alpha03

2020 年 10 月 14 日

androidx.room:room-*:2.3.0-alpha03 がリリースされました。バージョン 2.3.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • Room に、アプリが初期化を制御できるように、型コンバータのインスタンスを提供するための API が追加されました。Room に提供される型コンバータにマークを付けるには、新しいアノテーション @ProvidedTypeConverter を使用します。「mzgreen yairobbe@gmail.com」に感謝いたします。(Ie4fa5b/121067210

  • Room に、入力ストリームから読み込まれた、あらかじめパッケージ化されたデータベースを使用してデータベースを作成するための API が追加されました。これにより、あらかじめパッケージ化されたデータベースが gzip で圧縮されている場合などに対応できます。「Ahmed El-Helw ahmedre@gmail.com」に感謝いたします。(3e6792b/146911060

API の変更

  • 欠落しているターゲットを @ForeignKey アノテーションに追加しました。これにより、@Entity アノテーションの外部での使用を防ぐことができます。(Iced1e

  • RoomDatabase.java のフィールド mCallbacks を非表示にしました。(d576cbb/76109329

バグの修正

  • TypeConverter に関するドキュメントを更新し、TypeConverter を使用できるのは、列 / フィールドを変換する場合のみであり、行の変換には使用できないことを明確にしました。(I07c56b/77307836

  • DaoProcessor を更新し、Kotlin の「プリミティブ」を持つ汎用的なスーパー型を使用して Dao のコンパイラ エラーを修正しました。(Ice6bbb/160258066

  • add / remove オブザーバー メソッドに関するドキュメントを更新し、スレッド化について明確にしました。(Ifd1d9b/153948821

  • rowid 列を宣言した FTS テーブルを Room が誤って検証する問題を修正しました。(d62ebcb/145858914

外部からの協力

  • トルコ語に関連する大文字 / 小文字のロケールの問題を修正(5746e3)、b/68159494

  • Android Lollipop の問題を回避するため、RoomDatabase 内の ConcurrentHashMapCollections.synchronizedMap() に変更しました。(d1cfc7b/162431855

  • あらかじめパッケージ化された DB をコピーする場合のために、onOpenPrepackagedDatabase コールバックを追加しました。(I1ba74b/148934423

バージョン 2.3.0-alpha02

2020 年 7 月 22 日

androidx.room:room-*:2.3.0-alpha02 がリリースされました。バージョン 2.3.0-alpha02 に含まれる commit については、こちらをご覧ください

新機能

  • RxJava3 のサポート: Room で RxJava3 の型がサポートされるようになりました。RxJava2 と同様に、戻り値の型が Flowable、Single、Maybe、Completable の DAO メソッドを宣言できます。また、RxJava3 をサポートする新しいアーティファクト androidx.room:room-rxjava3 を使用できます。(b/152427884

API の変更

  • Kotlin の Object クラスで @TypeConverter の宣言がサポートされるようになりました。(b/151110764
  • Room の増分アノテーション処理オプションがデフォルトでオンになりました。(b/112110217

バージョン 2.3.0-alpha01

2020 年 6 月 10 日

androidx.room:room-*:2.3.0-alpha01 がリリースされました。バージョン 2.3.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • Paging 3.0 のサポート: 戻り値の型が androidx.paging.PagingSource である、@Query アノテーション付きメソッドの実装の生成が Room でサポートされます。

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

API の変更

  • @RewriteQueriesToDropUnusedColumns は、結果内の未使用の列が削除されるように Room がクエリの「*」投影を書き換える、便利な新しいアノテーションです。
  • プロセッサ オプション room.expandProjection のサポートが終了しました。スター投影を使用する Room 最適化クエリの代わりとして、@RewriteQueriesToDropUnusedColumns を使用してください。なお @RewriteQueriesToDropUnusedColumns は、@Embedded フィールドを含む戻り値の型に関して提供される列競合ソリューション room.expandProjection を置き換えるものではありません。

バグの修正

  • 増分アノテーション プロセッサを有効にするために使用される JDK バージョンを Room が正しく検出しないバグを修正しました。「Blaz Solar(me@blaz.solar)」に感謝いたします。(b/155215201
  • ANTLR も使用する他のプロセッサとのバージョン競合を避けるために、Room はアノテーション プロセッサで ANTLR 依存関係を埋め込むようになりました。(b/150106190

バージョン 2.2.6

バージョン 2.2.6

2020 年 12 月 16 日

androidx.room:room-*:2.2.6 がリリースされました。バージョン 2.2.6 に含まれる commit については、こちらをご覧ください

バグの修正

  • JDK の新しいバージョンで Room が増分アノテーション処理を誤って無効にする問題を修正しました。(b/171387388

バージョン 2.2.5

バージョン 2.2.5

2020 年 3 月 18 日

androidx.room:room-*:2.2.5 がリリースされました。バージョン 2.2.5 に含まれる commit については、こちらをご覧ください

バグの修正

  • MultiInstanceInvalidationService を directBootAware にします。「Mygod contact-git@mygod.be」 に感謝いたします。(b/148240967
  • 複数インスタンスの無効化が有効で、データベースに FTS エンティティが含まれている場合にクラッシュするバグを修正しました。(b/148969394
  • Room アノテーション プロセッサで SQLite ネイティブ ライブラリを読み込むときに、並列コンパイルが原因でコンパイラがクラッシュする問題を修正しました。(b/146217083

バージョン 2.2.4

バージョン 2.2.4

2020 年 2 月 19 日

androidx.room:room-common:2.2.4androidx.room:room-compiler:2.2.4androidx.room:room-guava:2.2.4androidx.room:room-ktx:2.2.4androidx.room:room-migration:2.2.4androidx.room:room-runtime:2.2.4androidx.room:room-rxjava2:2.2.4androidx.room:room-testing:2.2.4 がリリースされました。バージョン 2.2.4 に含まれる commit については、こちらをご覧ください

バグの修正

  • トランザクションが実際に開始される前にコルーチンがすぐにキャンセルされた場合にデッドロックになる、トランザクションの停止に関する問題を修正しました。(b/148181325
  • JDK 9 でのビルド時に @Generated が誤って使用される問題を修正しました。(b/146538330
  • Kotlin の DAO インターフェースに具象関数がある場合に Room が誤ったコードを生成する問題を修正しました。(b/146825845

バージョン 2.2.3

バージョン 2.2.3

2019 年 12 月 18 日

androidx.room:room-*:2.2.3 がリリースされました。バージョン 2.2.3 に含まれる commit については、こちらをご覧ください

バグの修正

  • 移行を行っておらず、スキーマにインデックスを持つレガシー ハッシュを含むデータベースを、Room が検証できないバグを修正しました。(b/139306173

バージョン 2.2.2

バージョン 2.2.2

2019 年 11 月 20 日

androidx.room:room-*:2.2.2 がリリースされました。バージョン 2.2.2 に含まれる commit については、こちらをご覧ください

バグの修正

  • 999 行を超える 1 対 1 の関係を収集すると Room が null に関連するアイテムを返すというバグを修正しました(b/143105450

バージョン 2.2.1

バージョン 2.2.1

2019 年 10 月 23 日

androidx.room:room-*:2.2.1 がリリースされました。バージョン 2.2.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • コンパイラ オプション expandProjection がオンのときの CURSOR_MISMATCH に関して Room が誤って警告するバグを修正しました。(b/140759491
  • コンパイル中のクエリの確認に使用されるネイティブ ライブラリが見つからない場合の処理を再試行するメカニズムを追加しました。

バージョン 2.2.0

バージョン 2.2.0

2019 年 10 月 9 日

androidx.room:room-*:2.2.0 がリリースされました。バージョン 2.2.0 に含まれる commit については、こちらをご覧ください

バージョン 2.1.0 以降の重要な変更点

  • あらかじめパッケージ化されたデータベース: すでにデータが設定されているデータベース ファイルを指定して RoomDatabase を作成するために、RoomDatabase.Builder の 2 つの新しい API を利用できるようになりました。createFromAsset() は、事前に設定されたデータベース ファイルが APK のアセット フォルダにある場合に使用し、createFromFile() は、ファイルが任意の場所にある場合に使用します。これらの API を使用すると破壊的な移行の動作が変更されるため、フォールバック移行中に、Room は、事前に設定されたデータベースがある場合はそれを再コピーしようとします。そうでない場合は、フォールバックして単にすべてのテーブルを削除し、再作成します。b/62185732
  • スキーマのデフォルト値: 列のデフォルト値の指定に使用できる新しいプロパティ defaultValue@ColumnInfo に追加されました。デフォルト値はデータベース スキーマの一部であり、指定されている場合は移行中に検証されます。b/64088772
  • 多対多の関係: 新しいアノテーション @Junction を受け取る新しいプロパティ associateBy@Relation に追加されました。ジャンクション テーブル(結合テーブルとも呼ばれます)を介して満たす必要がある関係の宣言に使用します。 b/69201917
  • 1 対 1 の関係: List 型または Set 型の、@Relation アノテーションが付けられた POJO フィールドの制限が解除され、実質的に単一値の関係を表現できるようになりました。 b/62905145
  • ターゲット エンティティ: DAO アノテーション @Insert@Update@Delete に新しいプロパティ targetEntity が追加され、DAO メソッドの対象として想定されたターゲット テーブルを指定できるようになりました。これにより、これらの DAO メソッドのパラメータを、部分的なエンティティとして解釈される任意の POJO にできます。実際面では、これにより部分的な挿入、削除、更新が可能になります。b/127549506
  • コルーチンの Flow: @Query DAO メソッドの戻り値の型が Flow<T> になりました。クエリ内の監視テーブルが無効になった場合、返された Flow は新しい値のセットを再出力します。戻り値の型を Channel<T> として DAO 関数を宣言するとエラーになります。代わりに、Room では Flow を使用してから、近隣関数を使用して FlowChannel に変換することをおすすめします。b/130428884
  • Gradle 増分アノテーション プロセッサ: Room が Gradle 分離アノテーション プロセッサになりました。プロセッサ オプション room.incremental を介して増分機能を有効にできます。詳しくは、Room のコンパイラ オプションに関する説明をご覧ください。問題が発生した場合は、こちらでバグを報告してください。今後の安定版では、増分機能をデフォルトで有効にする予定です。b/112110217
  • 展開投影: 新しい試験運用版のコンパイラ オプション room.expandProjection が追加されました。これにより Room は、戻り値の型の POJO の列のみを含むようにスター投影でクエリを書き換えます。たとえば @Query("SELECT * FROM Song") を指定した DAO メソッドの場合、フィールドが 2 つだけの SongIdAndTitle という名前の POJO を返します。次に、Room はクエリを SELECT id, title FROM Song に書き換えて、戻り値の型を満たす列の最小のセットが読み込まれるようにします。これにより、返される POJO の型のどのフィールドとも一致しない余分な列をクエリが返すときに表示される CURSOR_MISMATCH 警告が、実質的になくなります。

バージョン 2.2.0-rc01

2019 年 9 月 5 日

androidx.room:room:2.2.0-rc01 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

Room 2.2.0-beta01 から公開された変更はありません。

バージョン 2.2.0-beta01

2019 年 8 月 22 日

androidx.room:room-*:2.2.0-beta01 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

バグの修正

  • コルーチンの Flow クエリが一定時間後に新しい値の再出力を停止するバグを修正しました。(b/139175786
  • Room 1.0 以後移行されていないデータベースを開いているときに Room が以前のスキーマ ハッシュコードを受け入れず、無効なスキーマが原因でランタイム クラッシュが発生するバグを修正しました。(b/139306173

バージョン 2.2.0-alpha02

2019 年 8 月 7 日

androidx.room:room-*:2.2.0-alpha02 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

新機能

  • コルーチンの Flow: @Query DAO メソッドの戻り値の型が Flow<T> になりました。クエリ内の監視テーブルが無効になった場合、返された Flow は新しい値のセットを再出力します。戻り値の型を Channel<T> として DAO 関数を宣言するとエラーになります。代わりに、Room では Flow を使用してから、近隣関数を使用して FlowChannel に変換することをおすすめします。b/130428884
  • 展開投影: 新しい試験運用版のコンパイラ オプション room.expandProjection が追加されました。これにより Room は、戻り値の型の POJO の列のみを含むようにスター投影でクエリを書き換えます。たとえば @Query("SELECT * FROM Song") を指定した DAO メソッドの場合、フィールドが 2 つだけの SongIdAndTitle という名前の POJO を返します。次に、Room はクエリを SELECT id, title FROM Song に書き換えて、戻り値の型を満たす列の最小のセットが読み込まれるようにします。これにより、返される POJO の型のどのフィールドとも一致しない余分な列をクエリが返すときに表示される CURSOR_MISMATCH 警告が、実質的になくなります。
  • onDestructiveMigrate は、Room がデータベースを破壊的に移行するときのために RoomDatabase.Callback に追加された新しいコールバック API です。b/79962330

バグの修正

  • フィールドが保護されている場合に、Room がメソッドをフィールド セッターとして使用して誤ったコードを生成するバグを修正しました。b/136194628
  • 複数インスタンスの無効化が有効で、無効化サービスが強制終了されたときに、InvalidationTracker が 2 番目のプロセスで NPE をスローするバグを修正しました。 b/137454915
  • @RawQuery アノテーション付きの継承された suspend 関数の戻り値の型を Room が正しく識別しないバグを修正しました。b/137878827
  • 関連キーが BLOB 型の場合に生成される @Relation のコードを更新して、同等の ByteBuffer を使用するようにしました。 b/137881998
  • @Insert@Update@Delete の部分的なエンティティ パラメータとして使用される POJO にセッターが見つからないというエラーが Room で発生するバグを修正しました。b/138664463
  • 一部の DAO メソッドでエンティティ クラスが使用される場合に、@Entity を介して無視される列のゲッターとセッターが見つからないというエラーが Room で発生するバグを修正しました。 b/138238182
  • パラメータを再利用してクエリを実行すると、Room が名前付きバインディング引数を位置引数に正しく変換せず、ランタイム例外が発生するバグを修正しました。 b/137254857

バージョン 2.2.0-alpha01

2019 年 7 月 10 日

新機能

  • あらかじめパッケージ化されたデータベース: すでにデータが設定されているデータベース ファイルを指定して RoomDatabase を作成するために、RoomDatabase.Builder の 2 つの新しい API を利用できるようになりました。createFromAsset() は、事前に設定されたデータベース ファイルが APK のアセット フォルダにある場合に使用し、createFromFile() は、ファイルが任意の場所にある場合に使用します。これらの API を使用すると破壊的な移行の動作が変更されるため、フォールバック移行中に、Room は、事前に設定されたデータベースがある場合はそれを再コピーしようとします。そうでない場合は、フォールバックして単にすべてのテーブルを削除し、再作成します。b/62185732
  • スキーマのデフォルト値: 列のデフォルト値の指定に使用できる新しいプロパティ defaultValue@ColumnInfo に追加されました。デフォルト値はデータベース スキーマの一部であり、指定されている場合は移行中に検証されます。b/64088772

    注: ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z によって追加されたものなど、すでにデータベース スキーマにデフォルト値があり、@ColumnInfo を介して同じ列にデフォルト値を定義する場合、不明なデフォルト値を検証するために移行が必要になることがあります。詳しくは、Room の移行に関する説明をご覧ください。

  • 多対多の関係: 新しいアノテーション @Junction を受け取る新しいプロパティ associateBy@Relation に追加されました。ジャンクション テーブル(結合テーブルとも呼ばれます)を介して満たす必要がある関係の宣言に使用します。 b/69201917
  • 1 対 1 の関係: List 型または Set 型の、@Relation アノテーションが付けられた POJO フィールドの制限が解除され、実質的に単一値の関係を表現できるようになりました。 b/62905145
  • ターゲット エンティティ: DAO アノテーション @Insert@Update@Delete に新しいプロパティ targetEntity が追加され、DAO メソッドの対象として想定されたターゲット テーブルを指定できるようになりました。これにより、これらの DAO メソッドのパラメータを、部分的なエンティティとして解釈される任意の POJO にできます。実際面では、これにより部分的な挿入、削除、更新が可能になります。b/127549506
  • Gradle 増分アノテーション プロセッサ: Room が Gradle 分離アノテーション プロセッサになりました。プロセッサ オプション room.incremental を介して増分機能を有効にできます。詳しくは、Room のコンパイラ オプションに関する説明をご覧ください。問題が発生した場合は、こちらでバグを報告してください。今後の安定版では、増分機能をデフォルトで有効にする予定です。b/112110217

バグの修正

  • クエリの完了前にクエリの Rx ストリームが破棄された場合に、Room が EmptySetResultException をグローバル エラーハンドラに伝搬しなくなりました。 b/130257475
  • @RawQuery アノテーションが付けられた suspend DAO 関数に戻り値の型がない場合に、Room が誤ったエラー メッセージを表示するバグを修正しました。 b/134303897
  • Room は raw 型の DAO アダプターを生成しなくなりました。 b/135747255

バージョン 2.1.0

バージョン 2.1.0

2019 年 6 月 13 日

Room 2.1.0 がリリースされました。2.1.0-rc01 からの変更はありません。このバージョンに含まれる commit については、こちらをご覧ください。

2.0.0 以降の重要な変更

  • FTS: FTS3 または FTS4 マッピング テーブルを含むエンティティが Room でサポートされるようになりました。@Entity アノテーションが付与されたクラスでは、@Fts3 または @Fts4 のアノテーションを追加で使用することにより、全文検索のマッピング テーブルを含むクラスを宣言できるようになりました。アノテーションのメソッドを介して FTS オプションを使用することで、さらにカスタマイズできるようになります。
  • ビュー: Room で @DatabaseView アノテーションを使用することにより、クラスをストアドクエリ(ビューとも呼ばれます)として宣言できるようになりました。
  • コルーチン: DAO メソッドを suspend 関数として使用できるようになりました。この機能を利用するには、依存関係に room-ktx を含めます。ktx アーティファクトは、コルーチン内でデータベース トランザクションを実行するための拡張関数 RoomDatabase.withTransaction も提供します。
  • AutoValue: Room で、AutoValue アノテーションが付与されたクラスをエンティティや POJO として宣言できるようになりました。AutoValue アノテーションが付与されたクラスの抽象メソッドで、Room のアノテーションである @PrimaryKey@ColumnInfo@Embedded@Relation を宣言できるようになりました。これらのアノテーションは @CopyAnnotations とともに使用して、Room が正しく認識できるようにする必要もあります。
  • 非同期の追加サポート: @Insert@Delete、または @Update のアノテーションが付けられた DAO メソッドと、INSERTDELETE、または UPDATE のステートメントを含む @Query は、Rx の戻り値の型 CompletableSingleMaybe と、Guava の戻り値の型 ListenableFuture をサポートするようになり、suspend 関数にもできるようになりました。
  • enableMultiInstanceInvalidation: RoomDatabase.Builder の新しい API です。この API では、1 つのデータベース ファイルで RoomDatabase の複数のインスタンスを無効にできます。
  • fallbackToDestructiveMigrationOnDowngrade: RoomDatabase.Builder の新しい API です。この API は、ダウングレードが発生した場合にデータベースを自動的に再作成します。
  • ignoredColumns: @Entity アノテーションの新しい API です。この API を使用すると、無視するフィールドをフィールド名のリストで指定できます。
  • データクラスに含まれる Kotlin の基本コンストラクタが Room で適切に使用されるようになり、プロパティを vars として宣言する必要がなくなりました。

バージョン 2.1.0-rc01

2019 年 5 月 29 日

バグの修正

  • temp_store 構成がすでにセットアップされているために発生する可能性のある Room の初期化エラーを修正しました。 b/132602198
  • SQLite 3.27.0 以上のユーザーに対する、二重引用符の使用に関する警告を修正しました。 b/131712640
  • 複数の無効化チェックが並行して行われると InvalidationTracker がクラッシュするバグを修正しました。 b/133457594

バージョン 2.1.0-beta01

2019 年 5 月 7 日

androidx.room 2.1.0-beta01 がリリースされました。2.1.0-alpha07 からの変更はありません。このバージョンに含まれる commit については、こちらをご覧ください。

バージョン 2.1.0-alpha07

2019 年 4 月 25 日

API / 動作の変更

  • 拡張関数 RoomDatabase.withTransaction が変更され、CoroutineScope をレシーバとする関数ブロックを使用しなくなりました。これにより、トランザクション ブロックでの処理を同時実行するために必要な追加の coroutineScope { } ラッパーがスキップされなくなります。

バグの修正

  • コレクション型のパラメータを含む Kotlin DAO 関数について Room が適切な TypeConverter を見つけられないバグを修正しました。 b/122066791

バージョン 2.1.0-alpha06

2019 年 3 月 22 日

API / 動作の変更

  • Room がデータベース トランザクションの実行に複数のスレッドを使用しないように、非同期トランザクション クエリがシリアル化されました。RoomDatabase.Builder.setTransactionExecutor(Executor) が追加されて、トランザクションに使用するエグゼキュータを設定できるようになりました。
  • RoomDatabase.runInTransaction(Callable) は、チェックされた例外を RuntimeExceptions にラップしなくなりました。 b/128623748

バグの修正

  • コンテンツ テーブルと外部コンテンツ FTS テーブルの両方にオブザーバーが追加された場合に、無効化トラッカーがコンテンツ テーブルの監視を停止するバグを修正しました。 b/128508917
  • Room の SQLite 文法を SQLite 3.24.0 と一致させるように更新しました。 b/110883668

バージョン 2.1.0-alpha05

2019 年 3 月 13 日

新機能

  • 拡張関数 RoomDatabase.withTransaction を使用すると、コルーチン内でデータベース トランザクションを安全に実行できます。Room の拡張関数とコルーチンのサポートは、room-ktx アーティファクトで利用できます。
  • @Transaction アノテーションが付けられた非抽象 DAO メソッドを suspend 関数にできるようになりました。b/120241587

API / 動作の変更

  • アーティファクト room-coroutines の名前を、他の androidx アーティファクトと同じ命名規則に従って room-ktx に変更しました。
  • runInTransactionroom-ktx 拡張関数 withTransaction を優先して、RoomDatabasebeginTransactionsetTransactionSuccessfulendTransaction のサポートが終了しました。

バグの修正

  • 使用されたトークナイザーが SIMPLE の場合にトークナイザーの引数が削除されていたバグを修正しました。b/125427014
  • タイプが内部クラスであるパラメータを指定した suspend 関数を Room が正しく識別できないバグを修正しました。b/123767877
  • INSERTUPDATE、または DELETE のステートメントを使用した遅延 @Query DAO メソッドがメインスレッドでクエリの準備を行っていたバグを修正しました。b/123695593
  • 特定の suspend 関数に対して Room が不正なコードを生成するさまざまなバグを修正しました。b/123466702b/123457323
  • 生成されたコードで、サポートが終了したメソッドの使用が正しく抑制されていなかったバグを修正しました。b/117602586
  • androidx.sqlite の Room の依存関係を 1.0.2 に更新しました。これには、破損したデータベースを正しく処理するための修正が含まれています。b/124476912

既知の問題

  • Room 2.1.0-alpha05 は、Maven Central で現在利用できない kotlinx-metadata-jvm アーティファクトに依存しています(KT-27991)。 この依存関係は、maven { url "https://kotlin.bintray.com/kotlinx/" } をプロジェクトのリポジトリに追加することで解決できます。

バージョン 2.1.0-alpha04

2019 年 1 月 25 日

新機能

  • INSERTUPDATE、または DELETE ステートメントを含む @Query アノテーションが付けられた DAO メソッドが、非同期の型 SingleMaybleCompletableListenableFuture を返せるようになりました。さらに、suspend 関数にもできるようになりました。b/120227284

API / 動作の変更

  • @Transaction アノテーションが付けられた非抽象 DAO メソッドが非同期の型(SingleMaybleCompletableLiveDataListenableFuture など)を返す場合、Room がエラーをスローするようになりました。トランザクションはスレッドに限定されるため、Room は現在のところ、異なるスレッドでクエリを実行する可能性のある関数に関するトランザクションの開始と終了ができません。b/120109336
  • OnConflictStrategy.FAILOnConflictStrategy.ROLLBACK は、Android の現在の SQLite バインディングでは意図したとおりに動作しないため、@Deprecated になっています。b/117266738

バグの修正

  • DAO メソッドが suspend 関数である場合、Room が戻り値の型の TypeConverter を正しく使用しないバグを修正しました。b/122988159
  • 継承された suspend 関数を Room が誤って非 suspend と識別するバグを修正しました。b/122902595
  • @Embedded フィールドが親クラスにあり、複数の子クラスで使用される場合に、Room が誤ったコードを生成するバグを修正しました。b/121099048
  • beginTransaction()endTransaction() の間で DAO の suspend 関数を呼び出すと、データベースがデッドロックする問題を修正しました。b/120854786

バージョン 2.1.0-alpha03

2018 年 12 月 4 日

API の変更

  • @Fts3 または @Fts4 の FTS tokenizer が列挙値ではなく文字列を受け取るようになりました。これにより、カスタムの tokenizer を Room で使用できるようになりました。組み込みの tokenizer は依然として、FtsOptions で文字列定数として定義されています。b/119234881

新機能

  • コルーチン: DAO メソッドを suspend 関数として使用できるようになりました。Room の suspend 関数をサポートするために、新しいアーティファクト(room-coroutines)がリリースされました。b/69474692
  • DAO メソッドのアノテーションに @Insert@Delete@Update のいずれかを使用することで、戻り値の型として ListenableFuture を使用できるようになりました。b/119418331

バグの修正

  • Room が @EntityignoredColumns プロパティの列を使用して、誤ってコンストラクタを見つけようとするバグを修正しました。b/119830714
  • 生成された実装において、Room が DAO メソッドのパラメータを final としてマークしないバグを修正しました。b/118015483
  • Room のプロセッサが特殊記号を含むクエリのエラーを報告する際にクラッシュするバグを修正しました。b/119520136
  • Room が IN 式の引数として他の Collection の各種実装を拒否するバグを修正しました。b/119884035
  • Room から返される LiveData が常に監視される場合、ガベージ コレクションが行われ、新しいデータが生成されなくなるバグを修正しました。b/74477406
  • ロックの競合を緩和するよう RoomDatabase のクローズロックが更新されました。b/117900450

バージョン 2.1.0-alpha02

2018 年 10 月 30 日

新機能

  • @Relation@DatabaseView を参照できるようになりました。b/117680932

バグの修正

  • Rx の戻り値の型を使用して登録や破棄を行う場合に、Room がディスク I/O をメインスレッドで実行するバグを修正しました。b/117201279
  • Kotlin エンティティ クラスのフィールドに適した型コンバータを Room が見つけられないバグを修正しました。b/111404868
  • 引数のない Kotlin デフォルト メソッドを含む DAO インターフェースの実装に適さないコードが Room によって生成されるバグを修正しました。b/117527454
  • Room の SQLite 文法パーサーを更新し、ビルド時間が長引く原因となるパフォーマンスの問題を修正しました。b/117401230

バージョン 2.1.0-alpha01

2018 年 10 月 8 日

新機能

  • FTS: FTS3 または FTS4 マッピング テーブルを含むエンティティが Room でサポートされるようになりました。@Entity アノテーションが付与されたクラスでは、@Fts3 または @Fts4 のアノテーションを追加で使用することにより、全文検索のマッピング テーブルを含むクラスを宣言できるようになりました。アノテーションのメソッドを介して FTS オプションを使用することで、さらにカスタマイズできるようになります。b/62356416
  • ビュー: Room で @DatabaseView アノテーションを使用することにより、クラスをストアドクエリ(ビューとも呼ばれます)として宣言できるようになりました。b/67033276
  • AutoValue: Room で、AutoValue アノテーションが付与されたクラスをエンティティや POJO として宣言できるようになりました。AutoValue アノテーションが付与されたクラスの抽象メソッドで、Room のアノテーションである @PrimaryKey@ColumnInfo@Embedded@Relation を宣言できるようになりました。これらのアノテーションは @CopyAnnotations とともに使用して、Room が正しく認識できるようにする必要もあります。b/62408420
  • Rx の戻り値の型の追加サポート: DAO メソッドのアノテーションに @Insert@Delete@Update のいずれかを使用することで、Rx の戻り値の型として CompletableSingle<T>Maybe<T> を使用できるようになりました。b/63317956
  • @Relation が付与された不変の型: Room では従来、@Relation アノテーションが付与されたフィールドは設定できるものである必要がありましたが、それらのフィールドをコンストラクタのパラメータとして指定できるようになりました。
  • enableMultiInstanceInvalidation: RoomDatabase.Builder の新しい API です。この API では、1 つのデータベース ファイルで RoomDatabase の複数のインスタンスを無効にできます。この複数インスタンスの無効化メカニズムは、プロセスが複数にわたる場合でも機能します。b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: RoomDatabase.Builder の新しい API です。この API は、ダウングレードが発生した場合にデータベースを自動的に再作成します。b/110416954
  • ignoredColumns: @Entity アノテーションの新しい API です。この API を使用すると、無視するフィールドをフィールド名のリストで指定できます。エンティティで継承されたフィールドを無視する場合に便利です。b/63522075

API / 動作の変更

  • RoomDatabasemCallbackmDatabase@Deprecated になりました。これらは Room の次のメジャー バージョンで削除される予定です。b/76109329

バグの修正

  • 初期化中にデータベースが破損した場合または不正な移行が行われた場合に、Room を正常に復元できない問題を修正しました。b/111504749b/111519144
  • データクラスに含まれる Kotlin の基本コンストラクタが Room で適切に使用されるようになり、フィールドを vars として宣言する必要がなくなりました。b/105769985

バージョン 2.0.0

バージョン 2.0.0

2018 年 10 月 1 日

androidx.room 2.0.0 がリリースされました。2.0.0-rc01 からの変更はありません。

バージョン 2.0.0-rc01

2018 年 9 月 20 日

androidx.room 2.0.0-rc01 がリリースされました。2.0.0-beta01 からの変更はありません。

バージョン 2.0.0-beta01

2018 年 7 月 2 日

API / 動作の変更

  • RoomDatabase.Builder.setQueryExecutor() が追加され、クエリの実行場所のカスタマイズが可能になりました。
  • RxJava2 Observable のサポートが追加されました。
  • 生成された DAO とデータベースの実装は今回が最終版となります。

バグの修正

  • 「cannot find getter for field」エラーにクラス / フィールド名が指定されるようになりました。b/73334503
  • 旧バージョンの Room との RoomOpenHelper の下位互換性を修正しました。b/110197391

AndroidX 以前の依存関係

AndroidX 以前のバージョンの Room では、次の依存関係を含めます。

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

バージョン 1.1.1

バージョン 1.1.1

2018 年 6 月 19 日

Room 1.1.1 は Room 1.1.1-rc1 とまったく同じです。

バージョン 1.1.1-rc1

2018 年 5 月 16 日: 移行を使用している場合、Room 1.1.0 ではなく 1.1.1-rc1 を使用することを強くおすすめします。

Room で移行後の初期化が適切に処理されないバグを修正しました。b/79362399

バージョン 1.1.0

バージョン 1.1.0-beta3

2018 年 4 月 19 日

バグの修正

  • Kotlin POJO が Java で定義された関係エンティティを参照する際に発生するコンパイル エラーを修正しました。b/78199923

バージョン 1.1.0-beta2

2018 年 4 月 5 日

バグの修正

  • Room の Rx の SingleMaybe の実装における重大なバグを修正しました。このバグは、クエリのリサイクルを早すぎるタイミングで実行し、返された Single インスタンスまたは Maybe インスタンスに複数のオブザーバーを追加した場合に問題を引き起こしていました。 b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] がトランザクション内で呼び出された場合、データベースに VACUUM を実行しなくなりました。 b/77235565

バージョン 1.1.0-beta1

2018 年 3 月 21 日

API の変更

  • API レビューのフィードバックに基づき、@RawQuery では String をクエリ パラメータとして渡すことができなくなりました。[SupportSQLiteQuery][ref-SupportSQLiteQuery] を使用する必要があります(引数をサポートする [SupportSQLiteQuery][ref-SupportSQLiteQuery] のインスタンスを簡単に作成するには、[SimpleSQLiteQuery][ref-SimpleSQLiteQuery] についてご確認ください)。
  • RoomDatabase.Builder の [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] メソッドで、vararg Integer の代わりに vararg int を使用できるようになりました。

バグの修正

  • WAL チェックポイントを設定し、データベースの VACUUM を実行することで、[RoomDatabase.clearAllTables][ref-clearAllTables] がオペレーティング システムにスペースを返すようになりました。
  • [@RawQuery][ref-RawQuery] は、Pojo が Embedded フィールドまたは Relation を介してエンティティを参照する限り、observedEntities プロパティの Pojo をすべて受け入れるようになりました。 b/74041772
  • Paging: Room の DataSource の実装で、マルチテーブルの依存関係(関係、結合など)を適切に処理できるようになりました。以前はこの依存関係により、新しい結果をトリガーできず、コンパイルを実行できないこともありました。 b/74128314

バージョン 1.1.0-alpha1

2018 年 1 月 22 日

新機能

  • RawQuery: この新しい API を使用すると、@Dao メソッドで SQL をクエリ パラメータとして受け取ることができます。 b/62103290b/71458963
  • fallBackToDestructiveMigrationsFrom: RoomDatabase.Builder のこの新しい API を使用すると、よりきめ細かな制御が可能になり、スキーマ バージョンの破壊的な移行を開始できるようになります(fallbackToDestructiveMigration との比較)。 b/64989640
  • Room で新しい Paging API(alpha-4 以上)のみをサポートするようになりました。非推奨の LivePagedListProvider のサポートは終了しました。新しい Room アルファ版を使用するには、Paging alpha-4 以上を使用し、LivePagedListProvider から LivePagedListBuilder に切り替える必要があります(まだ切り替えていない場合)。

バグの修正

  • Kotlin Kapt の型に対するサポートが改善されました。b/69164099
  • フィールドの順序によってスキーマが無効化されることがなくなりました。b/64290754