Room
Update Terbaru | Rilis Stabil Saat Ini | Kandidat Rilis Berikutnya | Rilis Beta | Rilis Alfa |
---|---|---|---|---|
27 Januari 2021 | 2.2.6 | - | 2.3.0-beta01 | - |
Mendeklarasikan dependensi
Untuk menambahkan dependensi pada Room, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk informasi selengkapnya.
Dependensi untuk Room mencakup pengujian migrasi Room dan Room RxJava
Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle
bagi aplikasi atau modul Anda:
Kotlin
dependencies { def room_version = "2.2.6" 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.6" 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" }
Untuk mengetahui cara menggunakan ekstensi Kotlin, lihat dokumentasi ktx.
Untuk informasi selengkapnya tentang dependensi, lihat Menambahkan Dependensi Build.
Mengonfigurasi Opsi Compiler
Room memiliki opsi pemroses anotasi berikut:
room.schemaLocation
: Mengonfigurasi dan mengaktifkan ekspor skema database ke dalam file JSON di direktori yang ditentukan. Lihat Migrasi Room untuk informasi selengkapnya.room.incremental
: Mengaktifkan pemroses anotasi inkremental Gradle.room.expandProjection
: Mengonfigurasi Room untuk menulis ulang kueri sedemikian rupa sehingga proyeksi bintang teratasnya diperluas menjadi hanya berisi kolom yang ditentukan dalam jenis nilai yang ditampilkan metode DAO.
Contoh cara mengonfigurasi opsi ini ditampilkan dalam cuplikan kode berikut:
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += [ "room.schemaLocation":"$projectDir/schemas".toString(), "room.incremental":"true", "room.expandProjection":"true"] } } } }
Masukan
Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau punya masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara pada masalah yang ada dengan mengklik tombol bintang.
Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.
Versi 2.3.0
Versi 2.3.0-beta01
27 Januari 2021
androidx.room:room-*:2.3.0-beta01
dirilis. Versi 2.3.0-beta01 berisi commit berikut ini.
Fitur Baru
- Database yang Ditutup Secara Otomatis: Room kini memiliki kemampuan untuk menutup database yang tidak diakses setelah jangka waktu tertentu. Ini adalah fitur eksperimental yang dapat diaktifkan dengan memanggil
RoomDatabase.Builder#setAutoCloseTimeout()
. Fitur ini berguna untuk aplikasi dengan beberapa database.
Perbaikan Bug
- Memperbaiki masalah agar metode Dao dengan beberapa metode
@Update
atau@Delete
yang memiliki strategi konflik yang berbeda akan menghasilkan kode dengan salah satu strategi saja, secara efektif mengabaikan yang satunya. (/I0b90d, b/176138543)
Versi 2.3.0-alpha04
16 Desember 2020
androidx.room:room-*:2.3.0-alpha04
dirilis. Versi 2.3.0-alpha04 berisi commit berikut.
Fitur Baru
- Room sekarang menawarkan Callback API umum
RoomDatabase.QueryCallback
, saat kueri akan dijalankan nantinya, yang dapat berguna untuk logging di build debug. Callback dapat disetel melaluiRoomDatabase.Builder#setQueryCallback()
. (Iaa513, b/174478034, b/74877608) - Room sekarang akan ditetapkan secara default untuk menggunakan pengonversi jenis Enum ke String dan sebaliknya, jika tidak ada yang disediakan. Jika pengonversi jenis untuk enum sudah ada, Room akan memprioritaskan penggunaannya daripada pengonversi default. (b/73132006)
Masalah Umum
- Jika pengonversi jenis satu arah untuk pembacaan sudah ada untuk Enum, Room mungkin tidak sengaja menggunakan pengonversi String ke Enum bawaan yang mungkin tidak diinginkan. Ini adalah masalah umum dan dapat diperbaiki dengan menjadikannya pengonversi dua arah. Lihat b/175707691.
Perbaikan Bug
- Memperbaiki masalah saat Room akan menonaktifkan pemrosesan anotasi inkremental secara tidak tepat di versi JDK yang lebih baru. (b/171387388)
- Memperbaiki masalah terkait Room yang menemukan class yang dihasilkan ketika beberapa loader class digunakan. Terima kasih atas perbaikannya ‘Serendipity | 892449346@qq.com’. (b/170141113)
- Memperbaiki masalah saat Room akan menghasilkan kode yang salah ketika Kotlin
@Dao
memiliki class dasar yang generiknya adalah primitif di JVM. (b/160258066)
Kontribusi Eksternal
- Room sekarang akan menggunakan
beginTransactionNonExclusive
secara default jika mode WAL diaktifkan dan API adalah 16 atau lebih. Terima kasih kepada ‘Ahmed I. Khalil | ahmedibrahimkhali@gmail.com’. (b/126258791)
Versi 2.3.0-alpha03
14 Oktober 2020
androidx.room:room-*:2.3.0-alpha03
dirilis. Versi 2.3.0-alpha03 berisi commit berikut.
Fitur Baru
Room kini memiliki API untuk menyediakan instance pengonversi jenis sehingga aplikasi dapat mengontrol inisialisasinya. Untuk menandai pengonversi jenis yang akan disediakan ke Room, gunakan anotasi baru
@ProvidedTypeConverter
. Terima kasih kepada ‘mzgreen yairobbe@gmail.com’. (Ie4fa5, b/121067210)Room kini memiliki API untuk membuat database menggunakan database dalam bentuk paket yang dibaca dari stream input. Hal ini memungkinkan terjadinya kasus seperti saat database dalam bentuk paket dikompresi ke format gzip. Terima kasih kepada ‘Ahmed El-Helw ahmedre@gmail.com’ (3e6792, b/146911060)
Perubahan API
Menambahkan target yang hilang ke anotasi
@ForeignKey
untuk mencegah penggunaannya di luar anotasi@Entity
. (Iced1e)Kolom
mCallbacks
diRoomDatabase.java
kini disembunyikan. (d576cb, b/76109329)
Perbaikan Bug
Memperbarui dokumentasi TypeConverters untuk memperjelas bahwa TypeConverters hanya dapat digunakan untuk mengonversi kolom, bukan baris. (I07c56, b/77307836)
Mengupdate DaoProcessor untuk memperbaiki error compiler di Dao menggunakan jenis super generik dengan Kotlin "primitive". (Ice6bb, b/160258066)
Memperbarui dokumentasi metode observer add/remove untuk memperjelas threading (Ifd1d9, b/153948821)
Memperbaiki masalah pada Room yang salah memvalidasi tabel FTS yang mendeklarasikan kolom rowid-nya. (d62ebc, b/145858914)
Kontribusi Eksternal
Memperbaiki masalah lokal huruf besar/kecil terkait bahasa Turki (5746e3), b/68159494
Mengganti
ConcurrentHashMap
diRoomDatabase
denganCollections.synchronizedMap()
untuk menghindari masalah di Android Lollipop (d1cfc7, b/162431855)Menambahkan callback onOpenPrepackagedDatabase saat DB dalam bentuk paket disalin. (I1ba74, b/148934423)
Versi 2.3.0-alpha02
22 Juli 2020
androidx.room:room-*:2.3.0-alpha02
dirilis. Versi 2.3.0-alpha02 berisi commit berikut.
Fitur Baru
- Dukungan RxJava3: Room kini mendukung jenis RxJava3. Serupa dengan RxJava2, Anda dapat mendeklarasikan metode DAO yang jenis nilai yang ditampilkannya adalah Flowable, Single, Maybe, dan Completable. Selain itu, artefak baru
androidx.room:room-rxjava3
juga tersedia untuk mendukung RxJava3. (b/152427884)
Perubahan API
- Mendeklarasikan
@TypeConverter
di class Objek Kotlin kini didukung. (b/151110764) - Opsi pemrosesan anotasi inkremental Room kini AKTIF secara default. (b/112110217)
Versi 2.3.0-alpha01
10 Juni 2020
androidx.room:room-*:2.3.0-alpha01
dirilis. Versi 2.3.0-alpha01 berisi commit berikut.
Fitur Baru
Dukungan Paging 3.0: Room kini akan mendukung pembuatan implementasi untuk metode
@Query
yang dianotasi yang jenis nilai yang ditampilkannya adalahandroidx.paging.PagingSource
.@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
Perubahan API
@RemoveUnusedColumns
adalah anotasi praktis baru yang membuat Room menulis ulang proyeksi '*' dalam sebuah kueri sehingga kolom yang tidak digunakan dalam hasil dihapus.- Opsi pemroses
room.expandProjection
kini tidak digunakan lagi. Gunakan@RemoveUnusedColumns
sebagai pengganti untuk kueri pengoptimalan Room dengan proyeksi bintang. Perhatikan bahwa@RemoveUnusedColumn
tidak menggantikan solusi konflik kolomroom.expandProjection
yang ditawarkan terkait dengan jenis nilai yang ditampilkan yang berisi kolom@Embedded
.
Perbaikan Bug
- Memperbaiki bug ketika Room tidak mendeteksi versi JDK dengan benar yang digunakan untuk mengaktifkan pemroses anotasi inkremental. Terima kasih kepada Blaz Solar (me@blaz.solar) (b/155215201)
- Room kini menyematkan dependensi ANTLR-nya dengan pemroses anotasi untuk menghindari konflik versi dengan pemroses lain yang juga menggunakan ANTLR. (b/150106190)
Versi 2.2.6
Versi 2.2.6
16 Desember 2020
androidx.room:room-*:2.2.6
dirilis. Versi 2.2.6 berisi commit berikut ini.
Perbaikan Bug
- Memperbaiki masalah saat Room akan menonaktifkan pemrosesan anotasi inkremental secara tidak tepat di versi JDK yang lebih baru. (b/171387388)
Versi 2.2.5
Versi 2.2.5
18 Maret 2020
androidx.room:room-*:2.2.5
dirilis. Versi 2.2.5 berisi commit berikut.
Perbaikan Bug
- Menjadikan
MultiInstanceInvalidationService
directBootAware. Terima kasih ‘Mygod contact-git@mygod.be’ (b/148240967) - Memperbaiki bug yang akan menyebabkan error saat pembatalan multi-instance diaktifkan dan database berisi entity FTS. (b/148969394)
- Memperbaiki masalah saat memuat library native SQLite di pemroses anotasi Room yang akan menyebabkan compiler error karena kompilasi paralel. (b/146217083)
Versi 2.2.4
Versi 2.2.4
19 Februari 2020
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
, dan androidx.room:room-testing:2.2.4
dirilis. Versi 2.3.4 berisi commit berikut.
Perbaikan Bug
- Memperbaiki masalah terkait penangguhan transaksi yang akan mengalami deadlock jika coroutine dibatalkan dengan cepat sebelum transaksi benar-benar dimulai. (b/148181325)
- Memperbaiki masalah terkait @Generated yang digunakan dengan tidak benar saat membuat aplikasi dengan JDK 9. (b/146538330)
- Memperbaiki masalah saat Room menghasilkan kode yang salah bila antarmuka DAO di Kotlin memiliki fungsi konkret. (b/146825845)
Versi 2.2.3
Versi 2.2.3
18 Desember 2019
androidx.room:room-*:2.2.3
dirilis. Versi 2.2.3 berisi commit berikut.
Perbaikan bug
- Memperbaiki bug saat Room gagal memvalidasi database yang tidak melalui migrasi dan berisi hash lama dengan indeks dalam skemanya. (b/139306173)
Versi 2.2.2
Versi 2.2.2
20 November 2019
androidx.room:room-*:2.2.2
dirilis. Versi 2.2.2 berisi commit berikut ini.
Perbaikan bug
- Memperbaiki bug saat mengumpulkan hubungan one-to-one dengan lebih dari 999 baris akan menyebabkan Room menampilkan item terkait null. (b/143105450)
Versi 2.2.1
Versi 2.2.1
23 Oktober 2019
androidx.room:room-*:2.2.1
dirilis. Versi 2.2.1 berisi commit berikut.
Perbaikan bug
- Memperbaiki bug saat Room salah memperingatkan tentang
CURSOR_MISMATCH
dengan opsi compilerexpandProjection
AKTIF. (b/140759491) - Menambahkan mekanisme coba lagi untuk menangani library native yang hilang, yang digunakan untuk memverifikasi kueri selama waktu kompilasi.
Versi 2.2.0
Versi 2.2.0
9 Oktober 2019
androidx.room:room-*:2.2.0
dirilis. Versi 2.2.0 berisi commit berikut ini.
Perubahan penting sejak versi 2.1.0
- Database dalam Bentuk Paket : Dua API baru di
RoomDatabase.Builder
sekarang tersedia untuk membuatRoomDatabase
mengingat file database sudah terisi.createFromAsset()
digunakan jika file database yang sudah terisi terdapat di dalam folder aset APK, sedangkancreateFromFile()
digunakan jika file ini berada di sembarang lokasi. Penggunaan API ini mengubah perilaku migrasi destruktif sedemikian rupa sehingga selama migrasi fallback, Room akan mencoba menyalin ulang database yang terisi sebelumnya, jika tersedia. Jika tidak, Room akan melakukan fallback dengan menghilangkan dan membuat ulang semua tabel. b/62185732 - Nilai Default Skema:
@ColumnInfo
sekarang memiliki properti barudefaultValue
yang dapat digunakan untuk menentukan nilai default sebuah kolom. Nilai default adalah bagian dari skema database dan akan divalidasi selama migrasi, jika ditetapkan. b/64088772 - Relasi Many-to-Many:
@Relation
sekarang memiliki properti baruassociateBy
, yang menerima anotasi baru@Junction
, yang digunakan untuk mendeklarasikan relasi yang perlu dipenuhi melalui tabel junction (disebut juga tabel join). b/69201917 - Relasi One-to-One: Pembatasan pada kolom POJO yang dianotasikan dengan
@Relation
agar menjadi jenisList
atauSet
telah dicabut, sehingga memungkinkan representasi relasi nilai tunggal. b/62905145 - Entity Target: Anotasi DAO
@Insert
,@Update
, dan@Delete
sekarang memiliki properti barutargetEntity
, yang memungkinkan penentuan tabel target yang dimaksudkan untuk ditindaklanjuti dengan metode DAO. Hal ini memungkinkan parameter metode DAO untuk menjadi POJO arbitrer yang akan ditafsirkan sebagai entity parsial. Dalam praktiknya, hal ini memungkinkan penyisipan, penghapusan, dan update parsial. b/127549506 - Coroutine Flow: Metode DAO
@Query
kini dapat berupa jenis nilai yang ditampilkanFlow<T>
. Flow yang ditampilkan akan memunculkan ulang kumpulan nilai baru jika tabel pengamatan dalam kueri dinyatakan tidak valid. Mendeklarasikan fungsi DAO dengan jenis nilai yang ditampilkanChannel<T>
merupakan sebuah kesalahan. Room mendorong Anda untuk menggunakanFlow
, lalu menggunakan fungsi di dekatnya untuk mengonversiFlow
menjadiChannel
. b/130428884 - Pemroses Anotasi Inkremental Gradle: Room sekarang menjadi pemroses anotasi yang mengisolasi Gradle dan inkrementabilitas dapat diaktifkan melalui opsi pemroses
room.incremental
. Lihat Opsi Compiler Room untuk informasi selengkapnya. Jika Anda mengalami masalah, harap laporkan sebagai bug di sini. Kami berencana untuk mengaktifkan inkrementabilitas secara default pada versi stabil di waktu mendatang. b/112110217 - Memperluas Proyeksi : Opsi compiler eksperimental baru
room.expandProjection
ditambahkan yang menyebabkan Room menulis ulang kueri dengan proyeksi bintang agar hanya memuat kolom dalam jenis nilai yang ditampilkan POJO. Misalnya, untuk metode DAO dengan@Query("SELECT * FROM Song")
yang menampilkan POJO bernamaSongIdAndTitle
yang hanya terdiri dari dua kolom. Kemudian, Room akan menulis ulang kueri tersebut keSELECT id, title FROM Song
sedemikian rupa sehingga kumpulan minimum kolom yang sesuai dengan jenis nilai yang ditampilkan akan diambil. Hal ini pada dasarnya menghilangkan peringatanCURSOR_MISMATCH
yang ditampilkan saat kueri menampilkan kolom tambahan yang tidak cocok dengan kolom apa pun dalam jenis POJO yang ditampilkan.
Versi 2.2.0-rc01
5 September 2019
androidx.room:room:2.2.0-rc01
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Tidak ada perubahan publik sejak Room 2.2.0-beta01
.
Versi 2.2.0-beta01
22 Agustus 2019
androidx.room:room-*:2.2.0-beta01
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Perbaikan bug
- Memperbaiki bug saat kueri Coroutine Flow berhenti memunculkan kembali nilai baru setelah waktu tertentu. (b/139175786)
- Memperbaiki bug saat Room tidak menerima kode hash skema lama ketika membuka database yang tidak melakukan migrasi sejak Room 1.0, sehingga terjadi error runtime akibat skema yang tidak valid. (b/139306173)
Versi 2.2.0-alpha02
7 Agustus 2019
androidx.room:room-*:2.2.0-alpha02
dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Fitur Baru
- Coroutine Flow: Metode DAO
@Query
kini dapat berupa jenis nilai yang ditampilkanFlow<T>
. Flow yang ditampilkan akan memunculkan ulang kumpulan nilai baru jika tabel pengamatan dalam kueri dinyatakan tidak valid. Mendeklarasikan fungsi DAO dengan jenis nilai yang ditampilkanChannel<T>
merupakan sebuah kesalahan. Room mendorong Anda untuk menggunakanFlow
, lalu menggunakan fungsi di dekatnya untuk mengonversiFlow
menjadiChannel
. b/130428884 - Memperluas Proyeksi : Opsi compiler eksperimental baru
room.expandProjection
ditambahkan yang menyebabkan Room menulis ulang kueri dengan proyeksi bintang agar hanya memuat kolom dalam jenis nilai yang ditampilkan POJO. Misalnya, untuk metode DAO dengan@Query("SELECT * FROM Song")
yang menampilkan POJO bernamaSongIdAndTitle
yang hanya terdiri dari dua kolom. Kemudian, Room akan menulis ulang kueri tersebut keSELECT id, title FROM Song
sedemikian rupa sehingga kumpulan minimum kolom yang sesuai dengan jenis nilai yang ditampilkan akan diambil. Hal ini pada dasarnya menghilangkan peringatanCURSOR_MISMATCH
yang ditampilkan saat kueri menampilkan kolom tambahan yang tidak cocok dengan kolom apa pun dalam jenis POJO yang ditampilkan. onDestructiveMigrate
adalah callback API baru yang ditambahkan keRoomDatabase.Callback
saat Room memigrasikan database secara destruktif. b/79962330
Perbaikan Bug
- Memperbaiki bug saat Room menghasilkan kode yang salah menggunakan metode sebagai penyetel kolom ketika kolom dilindungi. b/136194628
- Memperbaiki bug yang menyebabkan InvalidationTracker memunculkan NPE dalam proses kedua saat pembatalan multi-instance diaktifkan dan Layanan pembatalan dimatikan. b/137454915
- Memperbaiki bug saat Room tidak mengidentifikasi dengan benar jenis nilai yang ditampilkan dari fungsi penangguhan turunan yang dianotasikan dengan
@RawQuery
. b/137878827 - Memperbarui kode yang dihasilkan untuk
@Relation
saat kunci penghubung berjenis BLOB untuk menggunakanByteBuffer
yang sebanding. b/137881998 - Memperbaiki bug di mana Room melaporkan penyetel yang hilang di POJO yang digunakan sebagai parameter entity parsial untuk
@Insert
,@Update
, dan@Delete
. b/138664463 - Memperbaiki bug saat Room melaporkan penyetel & pengambil yang hilang untuk kolom yang diabaikan melalui
@Entity
saat class entity tersebut digunakan dalam metode DAO tertentu. b/138238182 - Memperbaiki bug saat Room tidak mengonversi dengan benar argumen binding bernama menjadi argumen posisi, sehingga terjadi pengecualian runtime saat kueri dijalankan dengan parameter yang digunakan ulang. b/137254857
Versi 2.2.0-alpha01
10 Juli 2019
Fitur Baru
- Database dalam Bentuk Paket : Dua API baru di
RoomDatabase.Builder
sekarang tersedia untuk membuatRoomDatabase
mengingat file database sudah terisi.createFromAsset()
digunakan jika file database yang sudah terisi terdapat di dalam folder aset APK, sedangkancreateFromFile()
digunakan jika file ini berada di sembarang lokasi. Penggunaan API ini mengubah perilaku migrasi destruktif sedemikian rupa sehingga selama migrasi fallback, Room akan mencoba menyalin ulang database yang terisi sebelumnya, jika tersedia. Jika tidak, Room akan melakukan fallback dengan menghilangkan dan membuat ulang semua tabel. b/62185732 - Nilai Default Skema:
@ColumnInfo
sekarang memiliki properti barudefaultValue
yang dapat digunakan untuk menentukan nilai default sebuah kolom. Nilai default adalah bagian dari skema database dan akan divalidasi selama migrasi, jika ditetapkan. b/64088772Catatan: Jika skema database Anda sudah memiliki nilai default, seperti yang ditambahkan melalui
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
, dan Anda memutuskan untuk menentukan nilai default melalui@ColumnInfo
ke kolom yang sama, maka Anda mungkin perlu menyediakan migrasi untuk memvalidasi nilai default yang tidak diperhitungkan. Lihat Migrasi Room untuk informasi selengkapnya. - Relasi Many-to-Many:
@Relation
sekarang memiliki properti baruassociateBy
, yang menerima anotasi baru@Junction
, yang digunakan untuk mendeklarasikan relasi yang perlu dipenuhi melalui tabel junction (disebut juga tabel join). b/69201917 - Relasi One-to-One: Pembatasan pada kolom POJO yang dianotasikan dengan
@Relation
agar menjadi jenisList
atauSet
telah dicabut, sehingga memungkinkan representasi relasi nilai tunggal. b/62905145 - Entity Target: Anotasi DAO
@Insert
,@Update
, dan@Delete
sekarang memiliki properti barutargetEntity
, yang memungkinkan penentuan tabel target yang dimaksudkan untuk ditindaklanjuti dengan metode DAO. Hal ini memungkinkan parameter metode DAO untuk menjadi POJO arbitrer yang akan ditafsirkan sebagai entity parsial. Dalam praktiknya, hal ini memungkinkan penyisipan, penghapusan, dan update parsial. b/127549506 - Pemroses Anotasi Inkremental Gradle: Room sekarang menjadi pemroses anotasi yang mengisolasi Gradle dan inkrementabilitas dapat diaktifkan melalui opsi pemroses
room.incremental
. Lihat Opsi Compiler Room untuk informasi selengkapnya. Jika Anda mengalami masalah, harap laporkan sebagai bug di sini. Kami berencana untuk mengaktifkan inkrementabilitas secara default pada versi stabil di waktu mendatang. b/112110217
Perbaikan Bug
- Room tidak lagi menyebarkan
EmptySetResultException
ke pengendali error global saat aliran Rx dari suatu kueri telah dibuang sebelum kueri tersebut selesai. b/130257475 - Memperbaiki bug saat Room menampilkan pesan error yang salah saat fungsi DAO penangguhan yang dianotasikan dengan
@RawQuery
tidak memiliki jenis nilai yang ditampilkan. b/134303897 - Room tidak akan lagi menghasilkan adapter DAO dengan jenis mentah. b/135747255
Versi 2.1.0
Versi 2.1.0
13 Juni 2019
Room 2.1.0 dirilis tanpa perubahan dari versi 2.1.0-rc01
. Commit yang disertakan dalam versi tersebut dapat dilihat di sini.
Perubahan penting sejak 2.0.0
- FTS: Room sekarang mendukung entity dengan tabel pemetaan FTS3 atau FTS4 . Class yang dianotasikan dengan
@Entity
sekarang juga dapat dianotasikan dengan@Fts3
atau@Fts4
untuk mendeklarasikan class dengan tabel penelusuran teks lengkap pemetaan. Opsi FTS untuk penyesuaian lebih lanjut tersedia melalui metode anotasi. - View: Sekarang Room mendukung deklarasi class sebagai kueri tersimpan, yang disebut juga view, menggunakan anotasi
@DatabaseView
. - Couroutine: Metode DAO sekarang dapat berupa fungsi penangguhan. Sertakan
room-ktx
dalam dependensi Anda untuk memanfaatkan fungsionalitas ini. Artefak ktx juga menyediakan fungsi ekstensiRoomDatabase.withTransaction
untuk melakukan transaksi database dalam coroutine. - Nilai Otomatis: Room sekarang mendukung deklarasi class beranotasi AutoValue sebagai entity dan POJO. Anotasi Room
@PrimaryKey
,@ColumnInfo
,@Embedded
, dan@Relation
sekarang dapat dideklarasikan dalam metode abstrak milik class beranotasi nilai otomatis. Perhatikan bahwa anotasi ini juga harus disertai dengan@CopyAnnotations
agar Room dapat memahaminya dengan baik. - Dukungan Asinkron Tambahan: Metode DAO yang dianotasikan dengan
@Insert
,@Delete
, atau@Update
, beserta@Query
yang berisi pernyataanINSERT
,DELETE
, atauUPDATE
, sekarang mendukung jenis nilai yang ditampilkan RxCompletable
,Single
, danMaybe
, serta jenis nilai yang ditampilkan GuavaListenableFuture
, dan semuanya juga dapat menjadi fungsi penangguhan. enableMultiInstanceInvalidation
adalah API baru diRoomDatabase.Builder
untuk mengaktifkan pembatalan di berbagai instance RoomDatabase yang menggunakan file database yang sama.fallbackToDestructiveMigrationOnDowngrade
adalah API baru diRoomDatabase.Builder
untuk otomatis membuat ulang database jika downgrade terjadi.ignoredColumns
adalah API baru dalam anotasi@Entity
yang dapat digunakan untuk membuat daftar kolom yang diabaikan menurut namanya.- Sekarang Room akan menggunakan konstruktor utama Kotlin dalam class data dengan benar, sehingga tidak perlu lagi untuk mendeklarasikan properti sebagai
vars
.
Versi 2.1.0-rc01
29 Mei 2019
Perbaikan Bug
- Memperbaiki error inisialisasi Room yang mungkin terjadi akibat konfigurasi temp_store yang sudah disiapkan. b/132602198
- Memperbaiki peringatan penggunaan tanda petik ganda bagi pengguna yang menggunakan SQLite 3.27.0 dan yang lebih baru. b/131712640
- Memperbaiki bug saat InvalidationTracker akan menyebabkan error bila beberapa pemeriksaan pembatalan terjadi secara paralel. b/133457594
Versi 2.1.0-beta01
7 Mei 2019
androidx.room 2.1.0-beta01
dirilis tanpa perubahan dari versi 2.1.0-alpha07. Commit yang disertakan dalam versi ini dapat dilihat di sini.
Versi 2.1.0-alpha07
25 April 2019
Perubahan API/Perilaku
- Fungsi ekstensi
RoomDatabase.withTransaction
telah diubah agar tidak lagi mengambil blok fungsi yang menggunakanCoroutineScope
sebagai penerima. Perubahan ini mencegah dilewatkannya wrappercoroutineScope { }
tambahan yang diperlukan untuk menjalankan berbagai hal dalam blok transaksi secara serentak.
Perbaikan Bug
- Memperbaiki bug saat Room gagal mencocokkan TypeConverter untuk fungsi DAO Kotlin yang berisi parameter jenis Collection. b/122066791
Versi 2.1.0-alpha06
22 Maret 2019
Perubahan API/Perilaku
- Kueri transaksi asinkron sekarang diserialisasi sedemikian rupa sehingga Room tidak akan menggunakan lebih dari satu thread untuk menjalankan transaksi database.
RoomDatabase.Builder.setTransactionExecutor(Executor)
ditambahkan untuk memungkinkan pengonfigurasian eksekutor yang akan digunakan dalam transaksi. RoomDatabase.runInTransaction(Callable)
tidak akan lagi menggabung pengecualian yang sudah diperiksa ke dalam RuntimeExceptions. b/128623748
Perbaikan Bug
- Memperbaiki bug saat pelacak pembatalan berhenti mengamati tabel konten jika observer untuk tabel konten dan juga tabel FTS konten eksternal ditambahkan. b/128508917
- Memperbarui tata bahasa SQLite Room agar sesuai dengan SQLite 3.24.0. b/110883668
Versi 2.1.0-alpha05
13 Maret 2019
Fitur Baru
- Fungsi ekstensi
RoomDatabase.withTransaction
memungkinkan Anda melakukan transaksi database dengan aman di dalam coroutine. Fungsi ekstensi Room beserta dukungan coroutine tersedia dalam artefakroom-ktx
. - Metode DAO non-abstrak yang dianotasi dengan
@Transaction
sekarang dapat menjadi fungsi penangguhan. b/120241587
Perubahan API/Perilaku
- Artefak
room-coroutines
diubah namanya menjadiroom-ktx
mengikuti penamaan yang sama dengan artefak androidx lainnya. beginTransaction
,setTransactionSuccessful
, danendTransaction
diRoomDatabase
tidak digunakan lagi dan digantikan denganrunInTransaction
serta fungsi ekstensiroom-ktx
withTransaction
.
Perbaikan Bug
- Memperbaiki bug di mana argumen tokenizer dilepas jika tokenizer yang digunakan berformat SEDERHANA. b/125427014
- Memperbaiki bug saat Room gagal mengidentifikasi fungsi penangguhan dengan parameter yang berjenis class dalam. b/123767877
- Memperbaiki bug saat metode DAO
@Query
yang ditangguhkan dengan pernyataanINSERT
,UPDATE
, atauDELETE
mempersiapkan kueri di thread utama. b/123695593 - Memperbaiki berbagai bug saat Room menghasilkan kode yang salah untuk fungsi penangguhan tertentu. b/123466702 dan b/123457323
- Memperbaiki bug di mana penggunaan metode yang tidak digunakan lagi tidak disembunyikan dengan benar dalam kode yang dihasilkan. b/117602586
- Mengupdate dependensi Room androidx.sqlite ke 1.0.2 yang berisi perbaikan untuk penanganan database yang rusak dengan benar. b/124476912
Masalah Umum
- Room 2.1.0-alpha05 menggunakan artefak
kotlinx-metadata-jvm
sebagai dependensinya, yang saat ini tidak tersedia di Maven Central (KT-27991). Dependensi ini dapat diatasi dengan menambahkanmaven { url "https://kotlin.bintray.com/kotlinx/" }
ke repositori project Anda.
Versi 2.1.0-alpha04
25 Januari 2019
Fitur Baru
- Metode DAO yang dianotasi dengan
@Query
yang berisi pernyataanINSERT
,UPDATE
, atauDELETE
sekarang dapat menampilkan jenis asinkron sepertiSingle
,Mayble
,Completable
, danListenableFuture
. Selain itu, pernyataan tersebut juga dapat berupa fungsi penangguhan. b/120227284
Perubahan API/Perilaku
- Room sekarang akan memunculkan error jika metode DAO non-abstrak yang dianotasi dengan
@Transaction
menampilkan jenis asinkron sepertiSingle
,Mayble
,Completable
,LiveData
, atauListenableFuture
. Karena transaksi dibatasi thread, saat ini Room tidak dapat lagi memulai dan mengakhiri transaksi terkait fungsi yang mungkin menjalankan kueri di thread berbeda. b/120109336 OnConflictStrategy.FAIL
danOnConflictStrategy.ROLLBACK
sudah@Deprecated
karena tidak berperilaku sesuai yang diharapkan dengan binding SQLite terbaru Android. b/117266738
Perbaikan Bug
- Memperbaiki bug di mana Room tidak menggunakan TypeConverter dari jenis kembalian tertentu dengan benar jika metode DAO berupa fungsi penangguhan. b/122988159
- Memperbaiki bug saat Room salah mengidentifikasi fungsi penangguhan yang diwariskan sebagai bukan penangguhan. b/122902595
- Memperbaiki bug saat Room menghasilkan kode yang salah ketika kolom
@Embedded
berada di class induk dan digunakan di beberapa class turunan. b/121099048 - Memperbaiki masalah saat database menemui deadlock saat memanggil fungsi penangguhan DAO di antara
beginTransaction()
danendTransaction()
. b/120854786
Versi 2.1.0-alpha03
4 Desember 2018
Perubahan API
- FTS
tokenizer
dalam@Fts3
/@Fts4
sekarang menggunakan String, bukan Enum. Ini memungkinkan penggunaan tokenizer kustom di Room. Tokenizer bawaan tetap ditentukan diFtsOptions
sebagai konstanta string. b/119234881
Fitur Baru
- Couroutine: Metode DAO sekarang dapat berupa fungsi penangguhan. Untuk mendukung fungsi penangguhan di Room, artefak baru,
room-coroutines
, dirilis. b/69474692 - Metode DAO yang dianotasi dengan
@Insert
,@Delete
, atau@Update
sekarang mendukungListenableFuture
sebagai jenis nilai yang ditampilkan. b/119418331
Perbaikan Bug
- Memperbaiki bug saat Room salah mencoba untuk menemukan konstruktor dengan kolom dalam properti
ignoredColumns
untuk@Entity
. b/119830714 - Memperbaiki bug yang membuat Room tidak menandai parameter metode DAO sebagai final dalam implementasi yang dihasilkan. b/118015483
- Memperbaiki bug yang membuat prosesor Room tidak bekerja saat melaporkan error pada kueri yang memuat simbol khusus. b/119520136
- Memperbaiki bug saat Room menolak berbagai implementasi
Collection
lain sebagai argumen ekspresiIN
. b/119884035 - Memperbaiki bug yang membuat LiveData yang ditampilkan dari Room akan mendapatkan pembersihan sampah memori saat diamati selamanya sehingga tidak lagi memberikan data baru. b/74477406
- Mengupdate close lock
RoomDatabase
untuk mengurangi pertentangan kunci. b/117900450
Versi 2.1.0-alpha02
30 Oktober 2018
Fitur Baru
- Menambahkan dukungan untuk mereferensikan
@DatabaseView
dalam@Relation
. b/117680932
Perbaikan Bug
- Memperbaiki bug yang membuat Room menjalankan I/O disk di thread utama saat berlangganan dan berhenti langganan jenis pengembalian Rx. b/117201279
- Memperbaiki bug yang membuat Room gagal menemukan pengonversi jenis yang sesuai untuk kolom dalam class entity Kotlin. b/111404868
- Memperbaiki bug saat Room menghasilkan kode yang salah untuk implementasi antarmuka
DAO
yang berisi metode default Kotlin yang tidak memiliki argumen. b/117527454 - Mengupdate parser tata bahasa SQLite Room, memperbaiki masalah performa yang menyebabkan waktu build lama. b/117401230
Versi 2.1.0-alpha01
8 Oktober 2018
Fitur Baru
- FTS: Room sekarang mendukung entity dengan tabel pemetaan FTS3 atau FTS4 . Class yang dianotasi dengan
@Entity
sekarang juga dapat dianotasi dengan@Fts3
atau@Fts4
untuk mendeklarasikan class dengan tabel penelusuran teks lengkap pemetaan. Opsi FTS untuk penyesuaian lebih lanjut tersedia melalui metode anotasi. b/62356416 - View: Sekarang Room mendukung deklarasi class sebagai kueri tersimpan, yang disebut juga view, menggunakan anotasi @DatabaseView. b/67033276
- Nilai Otomatis: Room kini mendukung deklarasi class beranotasi AutoValue sebagai entity dan POJO. Anotasi Room
@PrimaryKey
,@ColumnInfo
,@Embedded
, dan@Relation
sekarang dapat dideklarasikan dalam metode abstrak milik class yang dianotasikan nilai otomatis. Pastikan anotasi ini juga harus disertai dengan@CopyAnnotations
agar Room dapat memahaminya dengan baik. b/62408420 - Dukungan Tambahan untuk Jenis Nilai yang Ditampilkan RX: Metode DAO yang dianotasi dengan
@Insert
,@Delete
, atau@Update
sekarang mendukung jenis nilai yang ditampilkan RxCompletable
,Single<T>
, danMaybe<T>
. b/63317956 - Jenis yang Tidak Berubah dengan
@Relation
: Sebelumnya Room memerlukan kolom beranotasi@Relation
agar dapat disetel, tetapi sekarang kolom tersebut dapat berupa parameter konstruktor. enableMultiInstanceInvalidation
: Adalah API baru diRoomDatabase.Builder
untuk mengaktifkan pembatalan di berbagai instance RoomDatabase yang menggunakan file database yang sama. Mekanisme pembatalan multi-instance ini juga berlaku pada banyak proses. b/62334005fallbackToDestructiveMigrationOnDowngrade
: Adalah API baru diRoomDatabase.Builder
untuk otomatis membuat ulang database jika terjadi downgrade. b/110416954ignoredColumns
: Adalah API baru dalam anotasi@Entity
yang dapat digunakan untuk membuat daftar kolom yang diabaikan menurut namanya. Berguna untuk mengabaikan kolom turunan pada suatu entity. b/63522075
Perubahan API/Perilaku
mCallback
danmDatabase
diRoomDatabase
sekarang@Deprecated
dan akan dihapus pada Room versi utama mendatang. b/76109329
Perbaikan Bug
- Memperbaiki dua masalah saat Room tidak dapat pulih dengan baik dari database yang rusak atau migrasi yang bermasalah selama inisialisasi. b/111504749 dan b/111519144
- Sekarang Room akan menggunakan dengan tepat konstruktor utama Kotlin dalam class data, sehingga menghindari perlunya mendeklarasikan kolom sebagai
vars
. b/105769985
Versi 2.0.0
Versi 2.0.0
1 Oktober 2018
androidx.room 2.0.0
dirilis tanpa perubahan dari versi 2.0.0-rc01.
Versi 2.0.0-rc01
20 September 2018
androidx.room 2.0.0-rc01
dirilis tanpa perubahan dari versi 2.0.0-beta01.
Versi 2.0.0-beta01
2 Juli 2018
Perubahan API/Perilaku
- Menambahkan
RoomDatabase.Builder.setQueryExecutor()
untuk mengizinkan penyesuaian tempat kueri dijalankan - Menambahkan dukungan
Observable
RxJava2 - Implementasi DAO dan Database yang dihasilkan sekarang sudah final
Perbaikan Bug
- Menentukan nama class/kolom di error "tidak dapat menemukan getter untuk kolom" b/73334503
- Memperbaiki kompatibilitas RoomOpenHelper dengan versi Room yang lebih lama b/110197391
Dependensi pra-AndroidX
Untuk Room versi pra-AndroidX, sertakan dependensi berikut:
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"
}
Versi 1.1.1
Versi 1.1.1
19 Juni 2018
Room versi 1.1.1
sama persis dengan Room versi 1.1.1-rc1
.
Versi 1.1.1-rc1
16 Mei 2018
Kami sangat merekomendasikan penggunaan Room versi 1.1.1-rc1
sebagai pengganti versi 1.1.0
jika Anda menggunakan migrasi.
Memperbaiki bug saat Room tidak menangani inisialisasi pasca-migrasi dengan benar b/79362399
Versi 1.1.0
Versi 1.1.0-beta3
19 April 2018
Perbaikan Bug
- Memperbaiki error kompilasi saat POJO Kotlin mereferensikan entity relasi yang ditentukan di Java b/78199923
Versi 1.1.0-beta2
5 April 2018
Perbaikan Bug
Memperbaiki bug penting dalam implementasi
Single
danMaybe
Rx Room saat kueri didaur ulang lebih awal, sehingga terjadi masalah jika Anda menambahkan lebih dari 1 observer ke instanceSingle
atauMaybe
yang ditampilkan. b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] tidak akan melakukan
VACUUM
database jika dipanggil di dalam transaksi. b/77235565
Versi 1.1.0-beta1
21 Maret 2018
Perubahan API
- Berdasarkan masukan Ulasan API,
@RawQuery
tidak lagi menerima penerusanString
sebagai parameter kueri. Anda perlu menggunakan [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (lihat [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] untuk membuat instance [SupportSQLiteQuery][ref-SupportSQLiteQuery] yang menyertakan dukungan argumen). - Metode [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] RoomDatabase.Builder sekarang menerima
vararg int
sebagai penggantivararg Integer
.
Perbaikan Bug
- [RoomDatabase.clearAllTables][ref-clearAllTables] sekarang mencoba mengembalikan ruang ke sistem operasi dengan menyetel checkpoint WAL dan melakukan
VACUUM
database. - [
@RawQuery
][ref-RawQuery] sekarang menerima Pojo apa pun untuk propertiobservedEntities
selama Pojo tersebut mereferensikan ke satu atau beberapa entity melalui kolomEmbedded
atauRelation
miliknya. b/74041772 - Paging: Implementasi DataSource Room sekarang menangani dependensi multi-tabel dengan benar (seperti relasi dan gabungan). Sebelumnya penanganan tersebut akan gagal memicu hasil baru, atau dapat gagal mengompilasi. b/74128314
Versi 1.1.0-alpha1
22 Januari 2018
Fitur Baru
RawQuery
: API baru ini memungkinkan metode@Dao
menerima SQL sebagai parameter kueri b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: API baru diRoomDatabase.Builder
ini memberikan kontrol yang lebih terperinci terkait dari versi skema awal mana migrasi destruktif diizinkan (dibandingkan dengan fallbackToDestructiveMigration) b/64989640- Room sekarang hanya mendukung Paging API yang lebih baru (alpha-4+), dan melepas dukungan untuk
LivePagedListProvider
yang tidak digunakan lagi. Untuk menggunakan alfa Room baru, Anda harus menggunakan Pagingalpha-4
atau yang lebih tinggi, dan beralih dariLivePagedListProvider
keLivePagedListBuilder
jika belum melakukannya.
Perbaikan Bug
- Peningkatan dukungan untuk jenis Kotlin Kapt. b/69164099
- Urutan kolom tidak membatalkan skema lagi. b/64290754