Google berkomitmen untuk mendorong terwujudnya keadilan rasial bagi komunitas Kulit Hitam. Lihat caranya.

Room

Library persistensi Room memberikan lapisan abstraksi pada SQLite untuk memungkinkan akses database yang lebih stabil sambil memanfaatkan kemampuan penuh SQLite.
Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
10 Juni 2020 2.2.5 - - 2.3.0-alpha01

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:

    dependencies {
      def room_version = "2.2.5"

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

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

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

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

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

Untuk mengetahui cara menggunakan ekstensi Kotlin, lihat dokumentasi ktx.

Untuk mengetahui 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 hingga 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 memiliki ide untuk meningkatkan kualitas library ini. Harap lihat masalah yang ada di library ini sebelum Anda membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah ada dengan mengklik tombol bintang.

Membuat terbitan baru

Baca dokumentasi Issue Tracker untuk mengetahui informasi selengkapnya.

Versi 2.3.0

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 adalah androidx.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 kolom room.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.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 dengan menangguhkan 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 di mana Room menghasilkan kode yang salah saat 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 di mana 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 di mana mengumpulkan hubungan satu-lawan-satu dengan lebih dari 999 baris akan menyebabkan Room menampilkan item yang terkait dengan 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 di mana Room salah memperingatkan tentang CURSOR_MISMATCH saat opsi compiler expandProjection 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 membuat RoomDatabase mengingat file database sudah terisi. createFromAsset() digunakan jika file database yang sudah terisi terdapat di dalam folder aset APK, sedangkan createFromFile() 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 baru defaultValue 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 baru associateBy, 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 jenis List atau Set telah dicabut, sehingga memungkinkan representasi relasi nilai tunggal. b/62905145
  • Entity Target: Anotasi DAO @Insert, @Update, dan @Delete sekarang memiliki properti baru targetEntity, 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 ditampilkan Flow<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 ditampilkan Channel<T> merupakan sebuah kesalahan. Room mendorong Anda untuk menggunakan Flow, lalu menggunakan fungsi di dekatnya untuk mengonversi Flow menjadi Channel. 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 bernama SongIdAndTitle yang hanya terdiri dari dua kolom. Kemudian, Room akan menulis ulang kueri tersebut ke SELECT id, title FROM Song sedemikian rupa sehingga kumpulan minimum kolom yang sesuai dengan jenis nilai yang ditampilkan akan diambil. Hal ini pada dasarnya menghilangkan peringatan CURSOR_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 di mana kueri Coroutine Flow berhenti memunculkan kembali nilai baru setelah waktu tertentu. (b/139175786)
  • Memperbaiki bug di mana Room tidak menerima kode hash skema lama saat 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 ditampilkan Flow<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 ditampilkan Channel<T> merupakan sebuah kesalahan. Room mendorong Anda untuk menggunakan Flow, lalu menggunakan fungsi di dekatnya untuk mengonversi Flow menjadi Channel. 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 bernama SongIdAndTitle yang hanya terdiri dari dua kolom. Kemudian, Room akan menulis ulang kueri tersebut ke SELECT id, title FROM Song sedemikian rupa sehingga kumpulan minimum kolom yang sesuai dengan jenis nilai yang ditampilkan akan diambil. Hal ini pada dasarnya menghilangkan peringatan CURSOR_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 ke RoomDatabase.Callback saat Room memigrasikan database secara destruktif. b/79962330

Perbaikan Bug

  • Memperbaiki bug di mana Room akan menghasilkan kode yang salah menggunakan metode sebagai penyetel kolom saat 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 di mana 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 menggunakan ByteBuffer 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 di mana 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 di mana 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 membuat RoomDatabase mengingat file database sudah terisi. createFromAsset() digunakan jika file database yang sudah terisi terdapat di dalam folder aset APK, sedangkan createFromFile() 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 baru defaultValue 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

    Catatan: 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 baru associateBy, 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 jenis List atau Set telah dicabut, sehingga memungkinkan representasi relasi nilai tunggal. b/62905145
  • Entity Target: Anotasi DAO @Insert, @Update, dan @Delete sekarang memiliki properti baru targetEntity, 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 di mana 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 menangguhkan fungsi. Sertakan room-ktx dalam dependensi Anda untuk memanfaatkan fungsionalitas ini. Artefak ktx juga menyediakan fungsi ekstensi RoomDatabase.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 pernyataan INSERT, DELETE, atau UPDATE, sekarang mendukung jenis nilai yang ditampilkan Rx Completable, Single, dan Maybe, serta jenis nilai yang ditampilkan Guava ListenableFuture, dan semuanya juga dapat menjadi fungsi penangguhan.
  • enableMultiInstanceInvalidation adalah API baru di RoomDatabase.Builder untuk mengaktifkan pembatalan di berbagai instance RoomDatabase yang menggunakan file database yang sama.
  • fallbackToDestructiveMigrationOnDowngrade adalah API baru di RoomDatabase.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 di mana InvalidationTracker akan menyebabkan error saat beberapa pemeriksaan pembatalan terjadi secara paralel. b/133457594

Versi 2.1.0-beta01

Mei 2022

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 menggunakan CoroutineScope sebagai penerima. Perubahan ini mencegah dilewatkannya wrapper coroutineScope { } tambahan yang diperlukan untuk menjalankan berbagai hal dalam blok transaksi secara serentak.

Perbaikan Bug

  • Memperbaiki bug di mana 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 di mana 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 artefak room-ktx.
  • Metode DAO non-abstrak yang dianotasi dengan @Transaction sekarang dapat menjadi fungsi penangguhan. b/120241587

Perubahan API/Perilaku

  • Artefak room-coroutines diubah namanya menjadi room-ktx mengikuti penamaan yang sama dengan artefak androidx lainnya.
  • beginTransaction, setTransactionSuccessful, dan endTransaction di RoomDatabase tidak digunakan lagi dan digantikan dengan runInTransaction serta fungsi ekstensi room-ktx withTransaction.

Perbaikan Bug

  • Memperbaiki bug di mana argumen tokenizer dilepas jika tokenizer yang digunakan berformat SEDERHANA. b/125427014
  • Memperbaiki bug di mana Room gagal mengidentifikasi fungsi penangguhan dengan parameter yang berjenis class dalam. b/123767877
  • Memperbaiki bug di mana metode DAO @Query yang ditangguhkan dengan pernyataan INSERT, UPDATE, atau DELETE mempersiapkan kueri di thread utama. b/123695593
  • Memperbaiki berbagai bug di mana 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 menangani dengan benar database yang rusak. 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 menambahkan maven { 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 pernyataan INSERT, UPDATE, atau DELETE sekarang dapat menampilkan jenis asinkron seperti Single, Mayble, Completable, dan ListenableFuture. 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 seperti Single, Mayble, Completable, LiveData, atau ListenableFuture. 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 dan OnConflictStrategy.ROLLBACK sudah @Deprecated (tidak digunakan lagi) karena tidak berperilaku sesuai yang diharapkan dengan binding SQLite terbaru Android. b/117266738

Perbaikan Bug

  • Memperbaiki bug di mana Room tidak menggunakan dengan benar TypeConverter dari jenis nilai yang ditampilkan, jika metode DAO berupa fungsi penangguhan. b/122988159
  • Memperbaiki bug di mana Room salah mengidentifikasi fungsi penangguhan yang diwariskan sebagai bukan penangguhan. b/122902595
  • Memperbaiki bug di mana Room menghasilkan kode yang salah saat kolom @Embedded berada di class induk dan digunakan di beberapa class turunan. b/121099048
  • Memperbaiki masalah di mana database mengalami deadlock saat memanggil fungsi penangguhan DAO di antara beginTransaction() dan endTransaction(). 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 di FtsOptions sebagai konstanta string. b/119234881

Fitur Baru

  • Couroutine: Metode DAO sekarang dapat menangguhkan fungsi. Untuk mendukung fungsi penangguhan di Room, artefak baru, room-coroutines, dirilis. b/69474692
  • Metode DAO yang dianotasi dengan @Insert, @Delete, atau @Update sekarang mendukung ListenableFuture sebagai jenis nilai yang ditampilkan. b/119418331

Perbaikan Bug

  • Memperbaiki bug di mana Room salah mencoba untuk menemukan constructor 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 di mana Room menolak berbagai implementasi Collection lain sebagai argumen dari ekspresi IN. 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 berlangganan dari jenis nilai yang ditampilkan Rx. b/117201279
  • Memperbaiki bug yang membuat Room gagal menemukan konverter jenis yang sesuai untuk kolom dalam class entity Kotlin. b/111404868
  • Memperbaiki bug di mana 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 Rx Completable, Single<T>, dan Maybe<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 constructor.
  • enableMultiInstanceInvalidation: Adalah API baru di RoomDatabase.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/62334005
  • fallbackToDestructiveMigrationOnDowngrade: Adalah API baru di RoomDatabase.Builder untuk otomatis membuat ulang database jika terjadi downgrade. b/110416954
  • ignoredColumns: 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 dan mDatabase di RoomDatabase sekarang @Deprecated (tidak digunakan lagi) dan akan dihapus pada Room versi utama mendatang. b/76109329

Perbaikan Bug

  • Memperbaiki dua masalah di mana 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 mundur 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 di mana 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 dan Maybe Rx Room di mana kueri didaur ulang lebih awal, sehingga terjadi masalah jika Anda menambahkan lebih dari 1 observer ke instance Single atau Maybe 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 penerusan String 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 pengganti vararg 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 properti observedEntities selama Pojo tersebut mereferensikan ke satu atau beberapa entity melalui kolom Embedded atau Relation 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/71458963
  • fallBackToDestructiveMigrationsFrom: API baru di RoomDatabase.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 Paging alpha-4 atau yang lebih tinggi, dan beralih dari LivePagedListProvider ke LivePagedListBuilder jika belum melakukannya.

Perbaikan Bug

  • Peningkatan dukungan untuk jenis Kotlin Kapt. b/69164099
  • Urutan kolom tidak membatalkan skema lagi. b/64290754