Room

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

依存関係の宣言

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

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

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

    dependencies {
      def room_version = "2.2.5"

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

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

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

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

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

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

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

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

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

  • room.schemaLocation: 指定するディレクトリの JSON ファイルにデータベース スキーマをエクスポートするように設定し、有効にします。詳しくは、Room の移行に関する説明をご覧ください。
  • room.incremental: Gradle の増分アノテーション プロセッサを有効にします。
  • room.expandProjection: クエリを書き換えることで、トップスター投影が展開されて DAO メソッドの戻り値の型で定義された列のみを含めるように、Room を設定します。

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

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

フィードバック

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

新しい問題を報告する

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

バージョン 2.3.0

バージョン 2.3.0-alpha01

2020 年 6 月 10 日

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

新機能

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

API の変更

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

バグの修正

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

バージョン 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 がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。

バグの修正

  • コルーチンの 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 のサポートが終了しました。

バグの修正

  • 使用された tokenizer が SIMPLE の場合に tokenizer の引数が削除されていたバグを修正しました。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