Room
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
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.0
、androidx.room:room-paging-rxjava2:2.5.0
、androidx.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
のパラメータを設定するためObserver
でonInvalidate()
を宣言することが必要になりました。さらに、特定の getter メソッドが、Kotlin ファイルでプロパティ アクセス構文を必要とするプロパティに変換されました。重大な非互換性エラーが生じた場合は、バグを報告してください。- 新しいショートカット アノテーション
@Upsert
を追加しました。このアノテーションは、一意性の競合がない場合にエンティティを挿入し、競合がある場合はエンティティの更新を試みます。(I7aaab、b/241964353) - Room ページングでのサポートのために新しい room-paging アーティファクト
room-paging-rxjava2
、room-paging-rxjava3
、room-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 では、主キーの制約の競合を識別できないためです。(I5f67f、b/243039555)
バグの修正
- シャドウ テーブルがスキーマ
.json
ファイルに誤ってエクスポートされた場合に破損する問題を修正しました。(I4f83b、b/246751839)
バージョン 2.5.0-alpha03
2022 年 8 月 24 日
androidx.room:room-*:2.5.0-alpha03
がリリースされました。バージョン 2.5.0-alpha03 に含まれる commit については、こちらをご覧ください。
新機能
- 新しいショートカット アノテーション
@Upsert
を追加しました。このアノテーションは、一意性の競合がない場合にエンティティを挿入し、競合がある場合はエンティティの更新を試みます。(I7aaab、b/241964353)
バグの修正
- 自動移行の外部キー制約の確認の際に、Room が
IllegalStateException
ではなくSQLiteConstraintException
をスローするようになりました。(I328dd) getOpenHelper
、getQueryExecutor
、getTransactionExecutor
のゲッター / プロパティに関する 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-rxjava2
、room-paging-rxjava3
、room-paging-guava
のサポートを追加しました。(41a1d4、b/203666906)、(eb6098、b/203666906)、(1b9ae4、b/203666906)
API の変更
room-runtime
はすべて Java から Kotlin に変換されました。(If2069、b/206859668)、(Ie4b55、b/206859668)、(I697ee、b/206859668)、(I96c25、b/206859668)注: Kotlin へのライブラリ変換のため、ソースの互換性がなくなる問題が発生するおそれがあります。コードを Kotlin で記述していて、Room の古いバージョンを呼び出す場合は、新しいバージョンでこれらのケースを処理する必要があります。たとえば、既知のソース互換性のない変更として、
InvalidationTracker
ではタイプがMutableSet
ではなくSet
のパラメータを設定するためObserver
でonInvalidate()
を宣言することが必要になりました。@MapInfo
で曖昧さ回避のために Key-Value テーブル名を指定するための API を追加しました。(Icc4b5)- プロパティ ゲッターで
@Ignore
を再度許可するようにソースの互換性の問題を修正しました。(Ifc2fb)
バグの修正
- 重複する列の解決ヒューリスティック アルゴリズム。Room はマルチマップ クエリで曖昧な列の解決を試みるようになりました。これにより、結果データ オブジェクトに正しくマッピングされるよう同じ名前の列を含むテーブルとの JOIN が可能になりました。(I4b444、b/201306012、b/212279118)
バージョン 2.5.0-alpha01
2022 年 2 月 23 日
androidx.room:room-*:2.5.0-alpha01
がリリースされました。バージョン 2.5.0-alpha01 に含まれる commit については、こちらをご覧ください。
API の変更
- Kotlin ソースで Room
@IntDef
の使用が適用されない問題を修正しました。(I75f41、b/217951311) - プロパティ ゲッターで
@Query
を再度許可するようにソースの互換性の問題を修正しました。(I0a09b) - room-common を Java から Kotlin に変換しました。(I69c48、b/206858235)
注: Kotlin へのライブラリ変換中に、一部のプロパティがコンパニオン オブジェクトに移動されたため、ソースの互換性がなくなる問題が発生するおそれがあります。コードを Kotlin で記述していて、Room の古いバージョンを呼び出す場合、新しいバージョンではこれらのプロパティにアクセスする際に「.Companion」サフィックスが必要になります。
- room-migration を Java から Kotlin に変換しました。(I2724b、b/206858622)
room-runtime
内のpaging
関連ファイルを Java から Kotlin に変換しました。(I82fc8、b/206859668)- FrameworkSQLite* レベルでのマルチプロセス ロックと使用のための API を追加し、マルチプロセスの最初のデータベース作成と移行を保護するようにしました。(Ied267、b/193182592)
バグの修正
- Kotlin ソースの内部プロパティのサポートを追加しました。これは Room の軽微な動作変更で、ゲッター / セッターとしてプロパティと一致させるときに関数のソース名を使用するようになります(以前は、内部の関数 / プロパティによって異なる関数の JVM 名を使用していました)。カスタムの
@JvmName
アノテーションを使用してゲッター / セッターをプライベート プロパティと一致させている場合は、更新後に生成されたコードを再確認してください(If6531、b/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>
のクエリメソッドのコードを生成するバグを修正しました。(If086e、b/213789489)
バージョン 2.4.1
バージョン 2.4.1
2022 年 1 月 12 日
androidx.room:room-*:2.4.1
がリリースされました。バージョン 2.4.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- Kotlin ソースの内部プロパティのサポートを追加しました。これは Room の軽微な動作変更で、ゲッター / セッターとしてプロパティと一致させるときに関数のソース名を使用するようになります(以前は、内部の関数 / プロパティによって異なる関数の JVM 名を使用していました)。カスタムの
@JvmName
アノテーションを使用してゲッター / セッターをプライベート プロパティと一致させている場合は、更新後に生成されたコードを再確認してください(If6531、b/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
メソッドがサポートされるようになりました。サポートされているマルチマップの型は、Map
、SparseArray
、LongSparseArray
と、Guava のImmutableMap
、ImmutableSetMultimap
、ImmutableListMultimap
です。
バージョン 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 のサポートを追加しました。(Ic91a2、b/138910317)
バグの修正
- 型の null 可能性情報を考慮する新しい TypeConverter アナライザを追加しました。この情報は KSP でしか利用できないため、KSP でのみデフォルトでオンになっています。問題が発生する場合は、room.useNullAwareTypeAnalysis=false をアノテーション プロセッサに渡すことでオフにできます。その場合、このフラグは今後に削除される予定であるためバグを報告してください。この新しい TypeConverter アナライザには null チェックでラップする機能があるため、null を受け取らない TypeConverter のみを提供することをおすすめします。なお、アノテーション プロセッサとして KAPT または Java を使用しているユーザーは(KSP とは異なり)型に null 可能性情報がないため影響がありません。(Ia88f9、b/193437407)
- FTS エンティティが ICU トークナイザーの使用を宣言した場合に、Room がコンパイルに失敗し、SQL エラーが発生するバグを修正しました。(I00db9、b/201753224)
- バージョン間で埋め込まれたエンティティに新しい列が追加されるという自動移行の問題を解決しました。(I5fcb1、b/193798291)
- LEFT JOIN クエリでのリレーショナル クエリ メソッドの戻り値の型に関する問題を解決しました。今回の変更により、1 対多のマッピングが存在する場合、無効な値オブジェクトは、カーソル内にない場合にキーに対して返されるコレクションに含まれなくなります。有効な値がない場合、キーは空のコレクションにマッピングされます。(Id5552、b/201946438)
- SQLite キーワードを列名でエスケープできない自動移行の問題を解決しました。(Idbed4、b/197133152)
バージョン 2.4.0-beta01
2021 年 10 月 13 日
androidx.room:room-*:2.4.0-beta01
がリリースされました。バージョン 2.4.0-beta01 に含まれる commit については、こちらをご覧ください。
バグの修正
- 同じ自動移行内の別のテーブルにも同じ名前の新しい列がある場合、自動移行で新しい列が追加されない問題を修正しました。(Ia5db5、b/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 については、こちらをご覧ください。
新機能
- UUID 用の組み込みの型コンバータを追加しました。(I671e8、b/73132006)
API の変更
デベロッパーが組み込みの Enum および UUID コンバータを無効にできるように、TypeConverter アノテーションに新しいプロパティを追加しました。これらのコンバータはデフォルトでオンになっていますが、特定のスコープまたはデータベース全体で無効にできます。詳しくは、TypeConverter のドキュメントをご覧ください。(36ae9e、b/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 のImmutableMap
、ImmutableSetMultimap
、ImmutableListMultimap
です。以下に、マルチマップ クエリの例を示します。
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 がエラーを表示しない問題を修正しました(I56ddd、b/190075899)
インデックスに関連する自動移行の問題を修正しました。(b/177673291)
依存関係の更新
- Room の KSP サポートが KSP
1.5.10-1.0.0-beta01
に依存するようになりました。(1ecb11、b/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 の増分コンパイルのサポートを追加しました。(I031c1、b/176453350)
バグの修正
- メインスレッドで PagingSource を作成すると ANR が発生するバグを修正しました。(I42b74、b/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 つの戦略のみを使用してコードを生成し、定義された戦略を結果的に無視する問題を修正しました。(/I0b90d、b/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()
を介して設定できます。(Iaa513、b/174478034、b/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」に感謝いたします。(Ie4fa5、b/121067210)Room に、入力ストリームから読み込まれた、あらかじめパッケージ化されたデータベースを使用してデータベースを作成するための API が追加されました。これにより、あらかじめパッケージ化されたデータベースが gzip で圧縮されている場合などに対応できます。「Ahmed El-Helw ahmedre@gmail.com」に感謝いたします。(3e6792、b/146911060)
API の変更
欠落しているターゲットを
@ForeignKey
アノテーションに追加しました。これにより、@Entity
アノテーションの外部での使用を防ぐことができます。(Iced1e)RoomDatabase.java
のフィールドmCallbacks
を非表示にしました。(d576cb、b/76109329)
バグの修正
TypeConverter に関するドキュメントを更新し、TypeConverter を使用できるのは、列 / フィールドを変換する場合のみであり、行の変換には使用できないことを明確にしました。(I07c56、b/77307836)
DaoProcessor を更新し、Kotlin の「プリミティブ」を持つ汎用的なスーパー型を使用して Dao のコンパイラ エラーを修正しました。(Ice6bb、b/160258066)
add / remove オブザーバー メソッドに関するドキュメントを更新し、スレッド化について明確にしました。(Ifd1d9、b/153948821)
rowid 列を宣言した FTS テーブルを Room が誤って検証する問題を修正しました。(d62ebc、b/145858914)
外部からの協力
トルコ語に関連する大文字 / 小文字のロケールの問題を修正(5746e3)、b/68159494
Android Lollipop の問題を回避するため、
RoomDatabase
内のConcurrentHashMap
をCollections.synchronizedMap()
に変更しました。(d1cfc7、b/162431855)あらかじめパッケージ化された DB をコピーする場合のために、onOpenPrepackagedDatabase コールバックを追加しました。(I1ba74、b/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.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
、androidx.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
を使用してから、近隣関数を使用してFlow
をChannel
に変換することをおすすめします。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
を使用してから、近隣関数を使用してFlow
をChannel
に変換することをおすすめします。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 メソッドと、INSERT
、DELETE
、またはUPDATE
のステートメントを含む@Query
は、Rx の戻り値の型Completable
、Single
、Maybe
と、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
に変更しました。 runInTransaction
とroom-ktx
拡張関数withTransaction
を優先して、RoomDatabase
のbeginTransaction
、setTransactionSuccessful
、endTransaction
のサポートが終了しました。
バグの修正
- 使用されたトークナイザーが SIMPLE の場合にトークナイザーの引数が削除されていたバグを修正しました。b/125427014
- タイプが内部クラスであるパラメータを指定した suspend 関数を Room が正しく識別できないバグを修正しました。b/123767877
INSERT
、UPDATE
、またはDELETE
のステートメントを使用した遅延@Query
DAO メソッドがメインスレッドでクエリの準備を行っていたバグを修正しました。b/123695593- 特定の suspend 関数に対して Room が不正なコードを生成するさまざまなバグを修正しました。b/123466702、b/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 日
新機能
INSERT
、UPDATE
、またはDELETE
ステートメントを含む@Query
アノテーションが付けられた DAO メソッドが、非同期の型Single
、Mayble
、Completable
、ListenableFuture
を返せるようになりました。さらに、suspend 関数にもできるようになりました。b/120227284
API / 動作の変更
@Transaction
アノテーションが付けられた非抽象 DAO メソッドが非同期の型(Single
、Mayble
、Completable
、LiveData
、ListenableFuture
など)を返す場合、Room がエラーをスローするようになりました。トランザクションはスレッドに限定されるため、Room は現在のところ、異なるスレッドでクエリを実行する可能性のある関数に関するトランザクションの開始と終了ができません。b/120109336OnConflictStrategy.FAIL
とOnConflictStrategy.ROLLBACK
は、Android の現在の SQLite バインディングでは意図したとおりに動作しないため、@Deprecated
になっています。b/117266738
バグの修正
- DAO メソッドが suspend 関数である場合、Room が戻り値の型の TypeConverter を正しく使用しないバグを修正しました。b/122988159
- 継承された suspend 関数を Room が誤って非 suspend と識別するバグを修正しました。b/122902595
@Embedded
フィールドが親クラスにあり、複数の子クラスで使用される場合に、Room が誤ったコードを生成するバグを修正しました。b/121099048beginTransaction()
とendTransaction()
の間で DAO の suspend 関数を呼び出すと、データベースがデッドロックする問題を修正しました。b/120854786
バージョン 2.1.0-alpha03
2018 年 12 月 4 日
API の変更
@Fts3
または@Fts4
の FTStokenizer
が列挙値ではなく文字列を受け取るようになりました。これにより、カスタムの tokenizer を Room で使用できるようになりました。組み込みの tokenizer は依然として、FtsOptions
で文字列定数として定義されています。b/119234881
新機能
- コルーチン: DAO メソッドを suspend 関数として使用できるようになりました。Room の suspend 関数をサポートするために、新しいアーティファクト(
room-coroutines
)がリリースされました。b/69474692 - DAO メソッドのアノテーションに
@Insert
、@Delete
、@Update
のいずれかを使用することで、戻り値の型としてListenableFuture
を使用できるようになりました。b/119418331
バグの修正
- Room が
@Entity
のignoredColumns
プロパティの列を使用して、誤ってコンストラクタを見つけようとするバグを修正しました。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 の戻り値の型としてCompletable
、Single<T>
、Maybe<T>
を使用できるようになりました。b/63317956 @Relation
が付与された不変の型: Room では従来、@Relation
アノテーションが付与されたフィールドは設定できるものである必要がありましたが、それらのフィールドをコンストラクタのパラメータとして指定できるようになりました。enableMultiInstanceInvalidation
:RoomDatabase.Builder
の新しい API です。この API では、1 つのデータベース ファイルで RoomDatabase の複数のインスタンスを無効にできます。この複数インスタンスの無効化メカニズムは、プロセスが複数にわたる場合でも機能します。b/62334005fallbackToDestructiveMigrationOnDowngrade
:RoomDatabase.Builder
の新しい API です。この API は、ダウングレードが発生した場合にデータベースを自動的に再作成します。b/110416954ignoredColumns
:@Entity
アノテーションの新しい API です。この API を使用すると、無視するフィールドをフィールド名のリストで指定できます。エンティティで継承されたフィールドを無視する場合に便利です。b/63522075
API / 動作の変更
RoomDatabase
のmCallback
とmDatabase
が@Deprecated
になりました。これらは Room の次のメジャー バージョンで削除される予定です。b/76109329
バグの修正
- 初期化中にデータベースが破損した場合または不正な移行が行われた場合に、Room を正常に復元できない問題を修正しました。b/111504749、b/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 の
Single
とMaybe
の実装における重大なバグを修正しました。このバグは、クエリのリサイクルを早すぎるタイミングで実行し、返された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/62103290、b/71458963fallBackToDestructiveMigrationsFrom
:RoomDatabase.Builder
のこの新しい API を使用すると、よりきめ細かな制御が可能になり、スキーマ バージョンの破壊的な移行を開始できるようになります(fallbackToDestructiveMigration との比較)。 b/64989640- Room で新しい Paging API(alpha-4 以上)のみをサポートするようになりました。非推奨の
LivePagedListProvider
のサポートは終了しました。新しい Room アルファ版を使用するには、Pagingalpha-4
以上を使用し、LivePagedListProvider
からLivePagedListBuilder
に切り替える必要があります(まだ切り替えていない場合)。
バグの修正
- Kotlin Kapt の型に対するサポートが改善されました。b/69164099
- フィールドの順序によってスキーマが無効化されることがなくなりました。b/64290754