Room
最新の更新 | 現在の安定版リリース | 次のリリース候補 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2020 年 12 月 16 日 | 2.2.6 | - | - | 2.3.0-alpha04 |
依存関係の宣言
Room への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。
Room の依存関係には、Room による移行のテストと Room RxJava が含まれます。
アプリまたはモジュールの build.gradle
ファイルに、必要なアーティファクトの依存関係を追加します。
Kotlin
dependencies { def room_version = "2.2.5" implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" // optional - Kotlin Extensions and Coroutines support for Room implementation "androidx.room:room-ktx:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" }
Java
dependencies { def room_version = "2.2.5" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // optional - RxJava support for Room implementation "androidx.room:room-rxjava2:$room_version" // optional - Guava support for Room, including Optional and ListenableFuture implementation "androidx.room:room-guava:$room_version" // optional - Test helpers testImplementation "androidx.room:room-testing:$room_version" }
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-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 に含まれるコミットについては、こちらをご覧ください。
新機能
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 の変更
@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.6
バージョン 2.2.6
2020 年 12 月 16 日
androidx.room:room-*:2.2.6
がリリースされました。バージョン 2.2.6 に含まれるコミットについては、こちらをご覧ください。
バグの修正
- 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
がリリースされました。このバージョンに含まれるコミットについては、こちらをご覧ください。
バグの修正
- コルーチンの 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