Room

Room持續性資料庫是SQLite提供的抽象層,可讓您以更可靠的資料庫存取方式,同時發揮SQLite的強大效用。
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2022年2月23日 2.4.2 - - 2.5.0-alpha01

宣告依附元件

如要在Room中新增依附元件,您必須將Google Maven存放區新增至專案。詳情請參閱 Google 的 Maven 存放區一文。

Room的依附元件包括測試Room遷移作業Room RxJava

請在應用程式或模組的build.gradle檔案中,為所需的構件新增依附元件:

Groovy

dependencies {
    def room_version = "2.4.2"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

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

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

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

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

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:2.5.0-alpha01"
}

Kotlin

dependencies {
    val roomVersion = "2.4.2"

    implementation("androidx.room:room-runtime:$roomVersion")
    annotationProcessor("androidx.room:room-compiler:$roomVersion")

    // To use Kotlin annotation processing tool (kapt)
    kapt("androidx.room:room-compiler:$roomVersion")
    // To use Kotlin Symbolic Processing (KSP)
    ksp("androidx.room:room-compiler:$roomVersion")

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

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$roomVersion")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$roomVersion")

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

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$roomVersion")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:2.5.0-alpha01")
}

如要進一步瞭解如何使用 Kotlin 擴充功能,請參閱 ktx 說明文件

如要進一步瞭解依附元件,請參閱新增建構依附元件一文。

針對非 Android 程式庫 (即 Java 或 Kotlin 限定 Gradle 模組),您也可以選擇依附於 androidx.room:room-common,以使用 Room 註解。

設定編譯器選項

Room提供下列註解處理工具選項:

  • room.schemaLocation:設定及啟用指定資料庫中的資料庫結構定義,以匯出至JSON檔案。詳情請參閱Room遷移一文。
  • room.incremental:啟用Gradle漸進式註解處理工具。
  • room.expandProjection:設定 Room 改寫查詢,藉由擴充頂層星號投射,僅納入 DAO 方法傳回類型中所定義的資料欄。

以下程式碼片段說明如何設定這些選項:

Groovy

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

Kotlin

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "room.schemaLocation" to "$projectDir/schemas",
                    "room.incremental" to "true",
                    "room.expandProjection" to "true"
                )
            }
        }
    }
}

意見回饋

您的意見有助於改善 Jetpack。如果您發現新問題,或是對這個程式庫有改進建議,請告訴我們。請先查看這個程式庫的現有問題,再建立新問題。如果要投票給現有問題,請按一下星號按鈕。

建立新問題

詳見Issue Tracker說明文件

2.5.0版本

2.5.0-alpha01版本

2022年2月23日

androidx.room:room-*:2.5.0-alpha01已釋出。2.5.0-alpha01 版本包含這些修訂版本。

API變更

  • 修正了在Kotlin來源代碼中未強制使用Room@IntDef的問題。(I75f41b/217951311)。
  • 已修正來源相容性問題,以便允許屬性getter中的@Query。(I0a09b)
  • 將 room-common 從 Java 轉換至 Kotlin。(I69c48b/206858235)

    注意:由於某些屬性在程式庫轉換至 Kotlin 的過程已遷移至隨附物件中,因此您可能會遇到原始碼不相容的問題。如果程式碼原本是以 Kotlin 編寫並呼叫舊版的 Room,新版本必須加上「.Companion」後置字元,才能存取這些屬性。

  • 將 room-migration 從 Java 轉換至 Kotlin。(I2724b, b/206858622)
  • 已將room-runtime中的paging相關檔案從Java轉換為Kotlin。(I82fc8b/206859668)。
  • 在 FrameworkSQLite* 層級新增了用於鎖定及使用多程序的 API,以保護多程序的首次資料庫建立作業和遷移作業。(Ied267b/193182592)。

修正錯誤

  • 在 Kotlin 原始碼中新增了內部屬性的支援。 這是 Room 的一項微幅行為變更,改為使用函式的原始碼名稱,讓函式在做為 getter/setter 時可與屬性維持一致 (先前,Room 採用函式的 JVM 名稱,與內部函式/屬性並不相同)。如果您使用自訂 @JvmName 註解,讓 getter/setter 與私有屬性維持一致,請於更新後仔細確認所產生的程式碼 (If6531b/205289020))

2.4.2版本

2.4.2版本

2022年2月23日

androidx.room:room-*:2.4.2已釋出。2.4.2版包含這些修訂版本。

修正錯誤

  • 修正當 Dao @Transaction 暫停函式的某區段因使用 -Xjvm-default=all 或同等模式編譯而產生預設介面方法時,無法順利產生程式碼的問題。(Ia4ce5)
  • 解決 Room 為 Array<ByteArray> 傳回類型查詢方法產生程式碼的錯誤。(If086eb/213789489)

2.4.1版本

2.4.1版本

2022年1月12日

androidx.room:room-*:2.4.1已釋出。2.4.1 版本包含這些修訂版本。

修正錯誤

  • 在 Kotlin 原始碼中新增了內部屬性的支援。 這是 Room 的一項微幅行為變更,改為使用函式的原始碼名稱,讓函式在做為 getter/setter 時可與屬性維持一致 (先前,Room 採用函式的 JVM 名稱,與內部函式/屬性並不相同)。如果您使用自訂 @JvmName 註解,讓 getter/setter 與私有屬性維持一致,請於更新後仔細確認所產生的程式碼 (If6531b/205289020))

2.4.0版本

2.4.0版本

2021年12月15日

androidx.room:room-*:2.4.0已釋出。2.4.0 版本包含這些修訂版本。

自 2.3.0 版本以來的重要異動

  • 自動遷移:這個Room現在提供API,只要匯出結構定義,即可自動產生遷移作業。為了通知 Room 產生自動遷移程序,您可以使用 @Database#autoMigrations 這個新屬性來宣告自動遷移的來源和目標版本。如果 Room 需要資料表和資料欄重新命名或刪除作業的進一步資訊,@AutoMigration 註解可宣告一個含有這類輸入內容的規格類別。@AutoMigration詳情請參閱說明文件。
  • 自動遷移的依附元件註冊@ProvidedAutoMigrationSpec是一種新的API,用於宣告會在執行階段透過RoomDatabase.Builder#addAutoMigrationSpec()提供AutoMigrationSpec。這可讓依附元件植入架構能在需要複雜的依附元件時提供這些規格。
  • 遷移測試輔助函式提供自動遷移支援:Room 的 MigrationTestHelper 經更新後提供一個新的建構函式 API,可接收測試中的資料庫類別,進而支援自動遷移作業。如此一來,輔助程式就能在runMigrationsAndValidate期間以相同的方式自動新增自動遷移。
  • Room分頁支援:推出androidx.room:room-paging,專為傳回androidx.paging.PagingSource的會議室查詢提供原生分頁3.0支援。
  • 關聯查詢方法:Room現已支援多重對應傳回類型@Dao方法,適合JOIN陳述式使用。支援的多重映射類型包括 MapSparseArrayLongSparseArray,以及 Guava 的 ImmutableMapImmutableSetMultimapImmutableListMultimap

2.4.0-rc01版本

2021年12月1日

androidx.room:room-*:2.4.0-rc01已釋出。版本2.4.0-rc01包含這些修訂版本。

新功能

  • 將 Room 所依附的 KSP 更新至 1.6.0-1.0.1,以支援 Kotlin 1.6

2.4.0-beta02版本

2021年11月17日

androidx.room:room-*:2.4.0-beta02已釋出。2.4.0-beta02版本包含這些修訂版本。

新功能

  • 我們已經在@MapInfo中新增對SparseArray和LongSparseArray的支援。(Ic91a2b/138910317)。

修正錯誤

  • 我們新增了新的TypeConverter分析工具,會將類型中的可空值性資訊納入考量。由於這項資訊僅適用於KSP,因此只會在KSP中開啟。如果造成任何問題,您可以將room.useNullAwareTypeAnalysis=false傳送至註解處理器,藉此關閉該功能。如果發生此狀況,請提出檔案錯誤,因為我們將於日後移除這個旗標。由於這項新的 TypeConverter 分析工具可在包裝函式中進行空值檢查,因此使用這項工具時,建議您只提供接收非空值的 TypeConverter。請注意,這對於使用KAPT或Java作為註解處理器(與KSP不同)的使用者沒有影響,因此該類型不含任何可空值性資訊。(Ia88f9b/193437407)。
  • 修正 Room 在 FTS 實體宣告使用 ICU 權杖化工具時無法編譯並顯示 SQL 錯誤訊息的錯誤。(I00db9b/201753224)
  • 已解決在版本之間新增至嵌入實體的新資料欄的自動遷移問題。(I5fcb1b/193798291)。
  • 已解決關聯查詢方法傳回LEFT JOIN查詢類型的問題。經過這些變更後,如果出現一對多映射的情況,系統針對鍵傳回的集合將不會納入在游標中找不到的無效值物件。如果找不到有效的值,系統就會將鍵對應至空白集合。(Id5552b/201946438)
  • 已解決在資料欄名稱中使用SQLite關鍵字逸出的自動遷移問題。(Idbed4b/197133152)。

2.4.0-beta01版本

2021年10月13日

androidx.room:room-*:2.4.0-beta01已釋出。2.4.0-beta01版本包含這些修訂版本。

修正錯誤

  • 修正了當自動遷移作業中有多個資料表包含同名的新資料欄時,自動遷移作業無法新增這些新資料欄的問題。(Ia5db5b/200818663)
  • Room分頁產生的PagingSource實作現在使用queryExecutor通過RoomDatabase.Builder,因此可以被覆寫,而非之前的Dispatchers.IO。(Iae259)

2.4.0-alpha05版本

2021年9月29日

androidx.room:room-*:2.4.0-alpha05已釋出。2.4.0-alpha05版本包含這些修訂版本。

新功能

API變更

  • 已在TypeTransformers註解中新增屬性,允許開發人員停用內建的Enum和UUID轉換器。這些轉換工具預設為開啟,但您可以為特定範圍或整個資料庫停用。詳情請參閱TypeConverters說明文件。(36ae9e, b/195413406)

  • 透過@MapInfo註解支援DAO中多重地圖傳回類型的非POJO鍵/值。(I4d704)

如果地圖的鍵或值欄來自單一資料欄,就必須使用@MapInfo。查看範例

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • 透過Room使用Paging3時,必須將room-paging設為必要成果。(Ieaffe)

修正錯誤

  • 修正問題:當查詢包含地圖索引鍵中資料欄的ORDER BY子句時,多重對應查詢結果無法正確排序。(I6b887)。

外部貢獻

  • 新增新的API以指定@Index中的索引順序。感謝Nikita Zhelonkin。(I033fc)

2.4.0-alpha04版本

2021年7月21日

androidx.room:room-*:2.4.0-alpha04已釋出。2.4.0-alpha04版本包含這些修訂版本。

新功能

  • 聊天室現在支援多重對應傳回類型@Dao方法,適合用於JOIN陳述式。支援的多重地圖類型包括Map和Guava的ImmutableMapImmutableSetMultimapImmutableListMultimap

    以下是多重地圖查詢的範例:

    一對一關係圖

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    一對多關係圖(標準多重地圖)

    @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId")
    fun getArtistAndAlbums(): Map<Artist, List<Album>>
    

    多重映射結果也可以包裝在系統支援的非同步傳回類型中,例如 LiveData、Rx 的 Observable 或協同程式 Flow

Room分頁

  • 已釋出androidx.room:room-paging,為傳回androidx.paging.PagingSource的Room查詢提供原生分頁3.0支援。

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • 這個成果會取代由Room建構在分頁3.0 API上的androidx.paging.PagingSource實作項目。新的 PagingSource 實作會以不同的方式剖析鍵,因此凡是手動提供到 Room PagingSource 的鍵,都必須將這項行為變更納入考量,包括透過 Pager 的建構函式傳遞的 initialKey。頁面將從Key開始載入,其中Key會載入第一個項目。這與現有行為不同,目前系統會將 LoadParams.Refresh.Key 視為使用者的捲動位置,並在鍵的前後都載入項目。

  • 這個成果是選用項目,如果選擇停用,則會改回支援在Room 2.3中導入的對Paging 3.0的現在支援。但是,在日後與使用Paging 3.0版本的Room中,這個成果在非發行版本中為選用項目。如要採用這個構件,請在課程路徑中加入 room-paging 構件。如果您使用的是 Gradle,請在 build.gradle 中加入下方程式碼片段:

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

修正錯誤

  • 修正自動匯出作業中處理外鍵違規問題的問題。(b/190113935)

2.4.0-alpha03版本

2021年6月16日

androidx.room:room-*:2.4.0-alpha03已釋出。2.4.0-alpha03 版本包含這些修訂版本。

API變更

  • 更新 Room 的 MigrationTestHelper,提供一個可接收測試中資料庫類別的新建構函式 API,以支援自動遷移作業。如此一來,輔助程式就能在runMigrationsAndValidate期間自動新增與自動遷移相同的方式。

修正錯誤

  • 修正Room SQL 原生程式庫支援Apple M1晶片的問題。(b/174695268

  • 修正問題:當@Transaction函式的流程類型是流程時,Room不會發生錯誤(I56dddb/190075899)

  • 修正自動遷移相關問題。b/177673291

依附元件更新

2.4.0-alpha02版本

2021年5月5日

androidx.room:room-*:2.4.0-alpha02已釋出。2.4.0-alpha02版本包含這些修訂版本。

API變更

  • @ProvidedAutoMigrationSpec是一種新的API,宣告在執行階段透過RoomDatabase.Builder#addAutoMigrationSpec()提供AutoMigrationSpec。這可讓依附元件植入架構能在需要複雜的依附元件時提供這些規格。

修正錯誤

  • 修正自動遷移作業,導致@DatabaseView無法正確重新建立。

外部貢獻

  • 在Room的JournalMode.TRUNCATE中修正InvalidationTracker回呼問題有時無效,或是太舊或根本沒有叫用的問題。感謝您使用Uli Bubenheimer | bubenheimer@users.noreply.github.com(b/154040286)

2.4.0-alpha01版本

2021年4月21日

androidx.room:room-*:2.4.0-alpha01已釋出。2.4.0-alpha01 版本包含這些修訂版本。

新功能

  • 自動遷移:這個Room現在提供API,只要匯出結構定義,即可自動產生遷移作業。為了通知 Room 產生自動遷移程序,您可以使用 @Database#autoMigrations 這個新屬性來宣告自動遷移的來源和目標版本。如果 Room 需要資料表和資料欄重新命名或刪除作業的進一步資訊,@AutoMigration 註解可宣告一個含有這類輸入內容的規格類別。詳情請參閱說明文件@AutoMigration

修正錯誤

  • 修正 Room 的結構定義驗證機制誤讓含有多餘括號的 defaultValue 通過驗證的問題。b/182284899

2.3.0版本

2.3.0版本

2021年4月21日

androidx.room:room-*:2.3.0已譯出。2.3.0版包含下列修訂版本。

自 2.2.0 版以來的重要異動

  • 內建列舉支援:從現在起,Room會根據預設使用「列舉」到「字串」,反之亦然(如果沒有提供列舉轉換器)。如果列舉的類型轉換工具已存在,Room將優先使用預設轉換器。
  • 查詢回呼:Room 現在針對即將執行的查詢提供 RoomDatabase.QueryCallback 這個一般回呼 API,可用於在偵錯版本中進行記錄。回呼可以透過RoomDatabase.Builder#setQueryCallback()設定。
  • 預先封裝改善項目:您現在可透過 Room 提供的 API,使用從輸入串流讀取到的預先封裝資料庫建立資料庫。這種做法可支援預先封裝資料庫採用 gzip 壓縮處理等情況。
  • 提供類型轉換工具:您現在可透過 Room 設置的 API,提供類型轉換工具執行個體,以便應用程式控制其初始化設定。如要標示會提供給Room的類型轉換工具,請使用新的註解@ProvidedTypeConverter。
  • RxJava3支援:Room現在支援RxJava3 類型。與RxJava2類似,您可以宣告DAO方法的傳回類型為「文字流」、「單頁」、「或許」和「可配對」類型。此外,您還可使用新的成果androidx.room:room-rxjava3來支援RxJava3。
  • 分頁3.0支援:Room現在支援產生@Query加註方法(傳回類型為androidx.paging.PagingSource)的導入方式。

2.3.0-rc01版本

2021年3月24日

androidx.room:room-*:2.3.0-rc01已釋出。2.3.0-rc01 版本包含這些修訂版本。

修正錯誤

  • 修正在暫停withTransaction區塊中,無法使用Room建立的「協同程式流程」查詢的問題。(I797bf)

2.3.0-beta03版本

2021年3月10日

androidx.room:room-*:2.3.0-beta03已釋出。2.3.0-beta03版本包含這些修訂版本。

新功能

修正錯誤

  • 修正在主執行緒上建立PagingSource可能會觸發ANR的錯誤。(I42b74, b/181221318)
  • 修正@ExperimentalRoomApi項瀏覽權限為公開套件,而不是私有。(b/181356119)

外部貢獻

  • 當Room也用@SkipQueryVerification註解時,允許Room在@Query註解的DAO方法中接受POJO返回類型。Room會盡可能盡力將查詢結果轉換為POJO傳回類型,方法與針對@RawQuery加註的DAO方法相同。感謝MarkMark Riegel | Hey@marcorei.com。(I45acb)

2.3.0-beta02版本

2021年2月18日

androidx.room:room-*:2.3.0-beta02已釋出。2.3.0-beta02版本包含這些修訂版本。

新功能

  • 聊天室的實驗性支援Kotlin符號處理作業KSP

    KSP會取代KAPT,以原生方式在Kotlin編譯器上執行註解處理器,並大幅縮短建構時間。

    如要將 Room 與 KSP 搭配使用,您可以套用 KSP Gradle 外掛程式,並將建構檔案中的 kapt 設定替換成 ksp。舉例來說,使用ksp 'androidx.room:room-compiler:2.3.0-beta02'替代kapt 'androidx.room:room-compiler:2.3.0-beta02'。詳情請參閱KSP說明文件

    請注意,由於KSP為實驗性功能,因此建議您仍將KAPT用於正式版程式碼。只有在沒有其他處理器使用KAPT時,才適合縮短建構時間。請參閱b/160322705的已知問題。

2.3.0-beta01版本

2021年1月27日

androidx.room:room-*:2.3.0-beta01已釋出。版本2.3.0-beta01包含這些修訂版本。

新功能

  • 自動關閉資料庫:Room現在可以關閉在給定時間後未存取的資料庫。這是實驗功能,呼叫RoomDatabase.Builder#setAutoCloseTimeout()即可啟用。這項功能適用於擁有多個資料庫的應用程式。

修正錯誤

  • 修正當 Dao 方法有多個 @Update@Delete 方法採用不同衝突策略時,產生的程式碼只會包含其中一種策略而有效忽略已定義策略的問題。(/I0b90db/176138543)。

2.3.0-alpha04版本

2020年12月16日

androidx.room:room-*:2.3.0-alpha04已釋出。2.3.0-alpha04版本包含這些修訂版本。

新功能

  • Room現在提供一般回呼APIRoomDatabase.QueryCallback,適合在查詢即將執行時,用於記錄偵錯建構作業。回呼可以透過RoomDatabase.Builder#setQueryCallback()設定。(Iaa513b/174478034b/74877608)。
  • 如果沒有提供,根據預設,Room會提供預設的列舉和字串,反之亦然。如果列舉的類型轉換工具已存在,Room將優先使用預設轉換器。(b/73132006)

已知問題

  • 如果 Enum 已經有用於讀取的單向類型轉換工具,Room 可能會誤用並不一定適用的內建 String 轉 Enum 轉換工具。目前已知這是雙向轉換者,這個問題可透過修正的方式解決。請見: b/175707691

修正錯誤

  • 修正問題:Room在較新的JDK版本中會誤將漸進式註解處理作業停用。(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版本包含這些修訂版本。

新功能

  • Room提供的API可提供不同類型的轉換器執行個體,方便應用程式控制初始化。如要標示即將提供給 Room 的類型轉換工具,請使用新的註解 @ProvidedTypeConverter。感謝您使用「mzgreenyairobbe@gmail.com」。(Ie4fa5b/121067210)。

  • Room現已提供API,讓您使用輸入串流讀取的預先封裝資料庫建立資料庫。這種做法可支援預先封裝資料庫採用 gzip 壓縮處理等情況。感謝「Ahmed El-Helwahmedre@gmail.com」(3e6792b/146911060)

API變更

  • @ForeignKey 註解新增了遺漏的目標,以防使用者將其用於 @Entity 註解以外的地方。(Iced1e)

  • RoomDatabase.java」中的「mCallbacks」欄位現在是隱藏狀態。(d576cbb/76109329)。

修正錯誤

  • 更新 TypeConverter 說明文件,清楚指明 TypeConverter 只能用於轉換資料欄/欄位,無法用於轉換資料列。(I07c56b/77307836)

  • 更新DaoProcessor並使用Kotlin「primitives」的超級類別的一般通用類型,來修正Dao上的編譯器錯誤。(Ice6bbb/160258066)

  • 更新新增/移除觀測工具方法說明文件,清楚說明執行緒使用模式 (Ifd1d9b/153948821)

  • 修正當 FTS 資料表宣告其 rowid 資料欄時,Room 誤讓這些資料表通過驗證的問題。(d62ebcb/145858914)。

外部貢獻

  • 修正與土耳其(5746e3)相關的大寫/小寫地區問題,b/68159494

  • RoomDatabase中的ConcurrentHashMap替換成Collections.synchronizedMap(),以避免Android Lollipop發生問題 (d1cfc7b/162431855)

  • 新增onOpenPrepackagedDatabase回呼,用於複製預先封裝的資料庫。(I1ba74b/148934423)。

2.3.0-alpha02版本

2020年7月22日

androidx.room:room-*:2.3.0-alpha02已釋出。2.3.0-alpha02版本包含這些修訂版本。

新功能

  • RxJava3支援:Room現在支援RxJava3類型。與RxJava2類似,您可以宣告DAO方法的傳回類型為「文字流」、「單頁」、「或許」和「可配對」類型。此外,您還可使用新的成果androidx.room:room-rxjava3來支援RxJava3。(b/152427884)

API變更

  • 現可支援在Kotlin物件類別中宣告@TypeConverter。(b/151110764)
  • Room的漸進式註解處理選項現已預設為開啟。(b/112110217)

2.3.0-alpha01版本

2020年6月10日

androidx.room:room-*:2.3.0-alpha01已釋出。2.3.0-alpha01 版本包含這些修訂版本。

新功能

  • 分頁3.0支援:聊天室現在支援為返回類型為androidx.paging.PagingSource@Query註解方法產生實作。

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun pagingSource(): PagingSource<Int, User>
    }
    

API變更

  • @RemoveUnusedColumns 是相當方便的新註解,可讓 Room 改寫查詢中的「*」投射,將結果中未使用的資料欄移除。
  • 處理器選項room.expandProjection現已淘汰。使用@RemoveUnusedColumns取代Room的星號投影查詢。請注意,對於包含@Embedded欄位的返回類型,@RemoveUnusedColumn不會替換提供的列衝突解決方案room.expandProjection

修正錯誤

  • 修正Room無法正確偵測用來啟用漸進式註解處理器的JDK版本的錯誤。感謝Blaz Solar(me@blaz.solar)(b/155215201)
  • Room 現在會將 ANTLR 依附元件嵌入註解處理工具中,以免與其他同樣使用 ANTLR 的處理工具發生衝突。(b/150106190)

2.2.6版本

2.2.6版本

2020年12月16日

androidx.room:room-*:2.2.6已釋出。2.2.6版包含這些修訂版本。

修正錯誤

  • 修正問題:Room在較新的JDK版本中會誤將漸進式註解處理作業停用。(b/171387388)

2.2.5版本

2.2.5版本

2020年3月18日

androidx.room:room-*:2.2.5已釋出。2.2.5版包含這些修訂版本。

修正錯誤

  • MultiInstanceInvalidationService設為DirectBootAware。感謝「Mygodcontact-git@mygod.be」(b/148240967)
  • 修正已啟用多重執行個體無效且資料庫包含FTS實體時會導致當機的問題。(b/148969394)
  • 修正問題:在Room註解處理器中載入SQLite原生資料庫,可能會導致編譯器因平行編譯而當機。(b/146217083)

2.2.4版本

2.2.4版本

2020年2月19日

已釋出androidx.room:room-common:2.2.4androidx.room:room-compiler:2.2.4androidx.room:room-guava:2.2.4androidx.room:room-ktx:2.2.4androidx.room:room-migration:2.2.4androidx.room:room-runtime:2.2.4androidx.room:room-rxjava2:2.2.4androidx.room:room-testing:2.2.42.2.4版包含這些修訂版本。

修正錯誤

  • 修正了在取消實際開始前即提早取消的交易問題。(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版包含這些修訂版本

修正錯誤

  • 修正了當資料庫未經歷任何遷移且在結構定義中有包含索引的舊版雜湊時,Room 無法驗證該資料庫的錯誤。(b/139306173)

2.2.2版本

2.2.2版本

2019年11月20日

androidx.room:room-*:2.2.2已釋出。2.2.2版包含這些修訂版本

修正錯誤

  • 修正了 Room 因為收集的一對一關係包含超過 999 列而傳回空值相關項目的錯誤。(b/143105450)

2.2.1版本

2.2.1版本

2019年10月23日

androidx.room:room-*:2.2.1已釋出。2.2.1版包含這些修訂版本

修正錯誤

  • 修正了 Room 在編譯器選項 expandProjection 設為開啟時誤發出 CURSOR_MISMATCH 警告的錯誤。(b/140759491)
  • 已新增重試機制,以處理編譯期間用於驗證查詢的缺少原生程式庫。

2.2.0版本

2.2.0版本

2019年10月9日

androidx.room:room-*:2.2.0已釋出。2.2.0版含有這些修訂版本

自 2.1.0 版以來的重要異動

  • 預先封裝的資料庫:現在RoomDatabase.Builder中的兩個新API現在可以使用已填入的資料庫檔案來建立RoomDatabasecreateFromAsset() 適合用於預先填入的資料庫檔案位於 APK 素材資源資料夾的情況,createFromFile() 則適合用於檔案位於任意位置的情況。這些 API 的使用情形會改變破壞性遷移作業的行為,因此在回退遷移作業期間,如有預先填入的資料庫,Room 會嘗試重新複製該資料庫,否則將回退改為直接刪除及重新建立所有資料表。b/62185732
  • 結構定義預設值@ColumnInfo 現在提供新的屬性 defaultValue,可用於指定資料欄的預設值。預設值是資料庫結構定義的一部分,會在遷移作業期間驗證。b/64088772
  • 多對多關係@Relation 現在提供新的屬性 associateBy,該屬性接受新的註解 @Junction,可用於宣告必須透過聯合資料表 (也稱為彙整資料表) 滿足的關係。b/69201917
  • 一對一關係:針對包含 @Relation 註解的 POJO 欄位解除了類型必須設為 ListSet 的限制,有效支援單一值關係的表示方式。b/62905145
  • 目標實體:DAO 註解 @Insert@Update@Delete 現在提供新的屬性 targetEntity,能夠指定 DAO 方法的執行目標資料表。讓這些DAO方法的參數必須是任意POJO,而這些POJO會解讀為部分實體。在實作中,這能夠讓使用者進行部分插入、刪除與更新。b/127549506
  • 協同程式流程@Query DAO 方法現在可以設為 Flow<T> 傳回類型。如果查詢中的觀察資料表無效,傳回的流程會重新發出一組新值。宣告 DAO 函式並將傳回類型設為 Channel<T> 將導致錯誤,Room 建議您改用 Flow,再使用相鄰的函式將 Flow 轉換成 Channelb/130428884
  • Gradle成效增幅註解處理器:Room現已支援Gradle隔離註解處理器,並可透過處理器選項room.incremental啟用遞增功能。詳情請參閱Room編譯選項一文。如有任何問題,請按這裡回報錯誤。我們預計在日後的穩定版本中預設啟用增量功能。b/112110217
  • 展開投射:新增了實驗性編譯器選項 room.expandProjection,讓 Room 改寫使用星號投射的查詢,僅納入傳回類型 POJO 中的資料欄。例如,如果是包含@Query("SELECT * FROM Song")的DAO方法,系統會傳回只有兩個欄位的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已釋出。您可以前往這裡查看這個版本包含的修訂版本。

自Room2.2.0-beta01起沒有公開變更。

2.2.0-beta01版本

2019年8月22日

已釋出 androidx.room:room-*:2.2.0-beta01。您可以前往這裡查看這個版本包含的修訂版本。

修正錯誤

  • 已修正Coroutine Flow查詢在特定時間後停止重新發送新值的錯誤。(b/139175786)
  • 修正Room在開啟資料庫時,自1.0版本起便一直沒有遷移作業時,會接受舊版結構定義雜湊碼,導致架構無效導致執行階段停止運作的問題。(b/139306173)

2.2.0-alpha02版本

2019年8月7日

androidx.room:room-*:2.2.0-alpha02已釋出。您可以前往這裡查看這個版本包含的修訂版本。

新功能

  • 協同程式流程@Query DAO 方法現在可以設為 Flow<T> 傳回類型。如果查詢中的觀察資料表無效,傳回的流程會重新發出一組新值。宣告 DAO 函式並將傳回類型設為 Channel<T> 將導致錯誤,Room 建議您改用 Flow,再使用相鄰的函式將 Flow 轉換成 Channelb/130428884
  • 展開投射:新增了實驗性編譯器選項 room.expandProjection,讓 Room 改寫使用星號投射的查詢,僅納入傳回類型 POJO 中的資料欄。例如,如果是包含@Query("SELECT * FROM Song")的DAO方法,系統會傳回只有兩個欄位的SongIdAndTitle這個POJO方法。在這種情況下,Room 會將查詢改寫為 SELECT id, title FROM Song,只擷取要滿足傳回類型所需的最低數量資料欄。這樣一來,即使查詢傳回的額外資料欄與 POJO 傳回類型中的所有欄位皆不相符,系統基本上也不會顯示 CURSOR_MISMATCH 警告。
  • onDestructiveMigrate是新增到RoomDatabase.Callback的回呼API,用於在Room中破壞性地遷移資料庫時。b/79962330

修正錯誤

  • 修正了當欄位受到保護時,Room 產生的程式碼會誤將方法當做欄位 setter 使用的錯誤。b/136194628
  • 修正了當多實體作廢設定為啟用且作廢服務遭到終止時,InvalidationTracker 會在第二個程序中擲回 NPE 的錯誤。b/137454915
  • 已修正「Room」無法正確標示為@RawQuery所繼承停權函式的傳回類型,這個問題現已修正。b/137878827
  • 當相關金鑰的類型(BLOB)使用可比較的ByteBuffer時,更新@Relation產生的程式碼。b/137881998
  • 修正了當使用 POJO 做為 @Insert@Update@Delete 的部分實體參數時,Room 會誤判 POJO 缺少 setter 的錯誤。b/138664463
  • 修正了在特定 DAO 方法中使用實體類別時,Room 會誤判透過 @Entity 忽略的資料欄缺少 getter 和 setter 的錯誤。b/138238182
  • 修正了當執行的查詢含有重複使用的參數時,Room 無法正確將已命名的繫結引數轉換成位置引數,而導致執行階段發生例外狀況的錯誤。b/137254857

2.2.0-alpha01版本

2019年7月10日

新功能

  • 預先封裝的資料庫:現在RoomDatabase.Builder中的兩個新API現在可以使用已填入的資料庫檔案來建立RoomDatabasecreateFromAsset() 適合用於預先填入的資料庫檔案位於 APK 素材資源資料夾的情況,createFromFile() 則適合用於檔案位於任意位置的情況。這些 API 的使用情形會改變破壞性遷移作業的行為,因此在回退遷移作業期間,如有預先填入的資料庫,Room 會嘗試重新複製該資料庫,否則將回退改為直接刪除及重新建立所有資料表。b/62185732
  • 結構定義預設值@ColumnInfo 現在提供新的屬性 defaultValue,可用於指定資料欄的預設值。預設值是資料庫結構定義的一部分,會在遷移作業期間驗證。b/64088772

    注意:如果您的資料庫結構定義已設有預設值 (例如透過 ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z 新增的值),而您決定透過 @ColumnInfo 針對相同資料欄定義預設值,您可能需要提供遷移程序來驗證未納入記錄的預設值。詳情請參閱Room Migrations一文。

  • 多對多關係@Relation 現在提供新的屬性 associateBy,該屬性接受新的註解 @Junction,可用於宣告必須透過聯合資料表 (也稱為彙整資料表) 滿足的關係。b/69201917
  • 一對一關係:針對包含 @Relation 註解的 POJO 欄位解除了類型必須設為 ListSet 的限制,有效支援單一值關係的表示方式。b/62905145
  • 目標實體:DAO 註解 @Insert@Update@Delete 現在提供新的屬性 targetEntity,能夠指定 DAO 方法的執行目標資料表。讓這些DAO方法的參數必須是任意POJO,而這些POJO會解讀為部分實體。在實作中,這能夠讓使用者進行部分插入、刪除與更新。b/127549506
  • Gradle成效增幅註解處理器:Room現已支援Gradle隔離註解處理器,並可透過處理器選項room.incremental啟用遞增功能。詳情請參閱Room編譯選項一文。如有任何問題,請按這裡回報錯誤。我們預計在日後的穩定版本中預設啟用增量功能。b/112110217

修正錯誤

  • 當查詢的 Rx Stream 在查詢完成前即遭到棄置時,Room 不會再將 EmptySetResultException 套用到全域錯誤處理常式。b/130257475
  • 修正了當包含 @RawQuery 註解的暫停 DAO 函式缺少傳回類型時,Room 顯示的錯誤訊息不正確的錯誤。b/134303897
  • Room將無法再產生採用原始類型的DAO變壓器。b/135747255

2.1.0版本

2.1.0版本

2019年6月13日

Room2.1.0已發布,2.1.0-rc01 沒有任何變更。您可以前往這裡查看這個版本包含的修訂版本。

自 2.0.0 版以來的重要異動

  • FTS:Room現已支援對應FTS3或FTS4資料表的實體。包含 @Entity 註解的類別現在可以另外加上 @Fts3@Fts4 註解,以宣告有指定對應全文搜尋資料表的類別。您可透過註解的方法取得進一步的自訂FTS選項。
  • 檢視:Room 現在支援使用 @DatabaseView 註解,將類別宣告為已儲存的查詢,也稱為檢視
  • 協同程式:DAO 方法現在可以是暫停函式。請在依附元件中加入room-ktx,以便使用這項功能。ktx構件也提供擴充功能函式RoomDatabase.withTransaction,以便在日常安排內執行資料庫交易。
  • 自動值:Room現在支援將AutoValue加註的類別宣告為實體和POJO。現在可以在自動加註註解類別抽象方法中宣告Room註解@PrimaryKey@ColumnInfo@Embedded@Relation。請注意,這些註解也必須包含@CopyAnnotations供「Room」正確解讀。
  • 其他非同步支援:DAO方法已加註@Insert@Delete@Update,以及@Query包含INSERTDELETEUPDATE陳述式現在支援Rx傳回類型CompletableSingleMaybe,以及Guava的退貨類型ListenableFuture,也可以暫停函式。
  • enableMultiInstanceInvalidationRoomDatabase.Builder中的新API,可使用相同的資料庫檔案啟用多個RoomDatabase執行個體失效。
  • fallbackToDestructiveMigrationOnDowngradeRoomDatabase.Builder中的新API,可在降級發生時,自動重新建立資料庫。
  • ignoredColumns@Entity註解中的新API,可用來依名稱列出忽略的欄位。
  • Room現在會在資料類別中正確使用Kotlin的主要建構函式,無須將屬性宣告為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沒有任何變更。您可以前往這裡查看這個版本包含的修訂版本。

2.1.0-alpha07版本

2019年4月25日

API/行為變更

  • 擴充功能函式RoomDatabase.withTransaction已變更,不再以包含CoroutineScope的接收端加入函式區塊。這樣可以略過同時在交易區塊中執行項目所需的額外coroutineScope { }包裝函式。

修正錯誤

  • 已修正「Room」無法為Collection DAO函式的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-ktx成果中提供Room擴充功能和協同程式支援。
  • 標註@Transaction的非禁止DAO方法現在可以暫停函式。b/120241587

API/行為變更

  • 已將成果「room-coroutines」重新命名為room-ktx,其命名與其他Androidx成果相同。
  • 淘汰了 RoomDatabase 中的 beginTransactionsetTransactionSuccessfulendTransaction,並改用 runInTransactionroom-ktx 擴充函式 withTransaction

修正錯誤

  • 已修正使用權杖化工具為SIMPLE時捨棄權杖化器引數的錯誤。b/125427014
  • 修正錯誤,讓Room無法針對類型為內部類別的參數正確辨識停權函式。b/123767877
  • 修正了含有 INSERTUPDATEDELETE 陳述式的延遲執行 @Query DAO 方法在主執行緒中急切準備查詢的問題。b/123695593
  • 修正了 Room 針對特定暫停函式會產生不正確程式碼的多項錯誤。b/123466702b/123457323
  • 已修正在產生的程式碼中未正確禁止已淘汰方法的使用情形。b/117602586
  • 將androidx.sqlite的Room依附元件更新為1.0.2,修正了無法正確處理資料庫的問題。b/124476912

已知問題

  • Room 2.1.0-alpha05取決於Maven Central中(KT-27991)目前不支援的kotlinx-metadata-jvm成果。將maven { url "https://kotlin.bintray.com/kotlinx/" }新增至專案存放區,即可解決這項依附元件。

2.1.0-alpha04版本

2019年1月25日

新功能

  • 加上 @Query 註解且含有 INSERTUPDATEDELETE 陳述式的 DAO 方法現在可傳回非同步類型 SingleMaybleCompletableListenableFuture。也可以暫停函式。b/120227284

API / 行為變更

  • 現在,如果加上 @Transaction 註解的非抽象 DAO 方法傳回 SingleMaybleCompletableLiveDataListenableFuture 等非同步類型,Room 會擲回錯誤。由於交易設有限制,因此Room目前仍無法針對涉及不同會話串查詢的查詢函式發起及結束交易。b/120109336
  • OnConflictStrategy.FAILOnConflictStrategy.ROLLBACK 已透過 @Deprecated 淘汰,原因是這些註解與 Android 現有 SQLite 繫結搭配使用時的行為與預期不符。b/117266738

修正錯誤

  • 修正了 Room 在 DAO 方法為暫停函式時,無法正確使用傳回類型 TypeConverter 的錯誤。b/122988159
  • 修正了 Room 將沿用的暫停函式誤認為非暫停函式的錯誤。b/122902595
  • 修正了當 @Embedded 欄位位於父項類別且用於多個子項類別時,Room 會產生不正確程式碼的錯誤。b/121099048
  • 修正在叫用beginTransaction()endTransaction()時,資料庫在DAO暫停期間會解除資料庫的問題。b/120854786

2.1.0-alpha03版本

2018年12月4日

API變更

  • @Fts3/@Fts4 中的 FTS tokenizer 現在接受 String,而非 Enum。這樣一來,Room 就能使用自訂權杖化工具。內建權杖化工具仍會透過 FtsOptions 以字串常數定義。b/119234881

新功能

  • 協同程式:DAO 方法現在可以是暫停函式。為了支援 Room 的暫停函式,我們推出了新構件 room-coroutinesb/69474692
  • 加上 @Insert@Delete@Update 註解的 DAO 方法現在支援 ListenableFuture 做為傳回類型。b/119418331

修正錯誤

  • 修正了 Room 在 @EntityignoredColumns 屬性中嘗試尋找含有資料欄的建構函式的錯誤。b/119830714
  • 修正了 Room 在所產生的實作項目中不會將 DAO 方法參數標示為最終參數的錯誤。b/118015483
  • 修正了 Room 處理器在針對含有特殊符號的查詢回報錯誤時會異常終止的錯誤。b/119520136
  • 修正了 Room 會拒絕使用其他 Collection 實作項目做為 IN 運算式引數的錯誤。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
  • 修正了 Room 無法為 Kotlin 實體類別中的欄位找到適當類型轉換工具的錯誤。b/111404868
  • 修正了當 DAO 介面實作包含的 Kotlin 預設方法沒有引數時,Room 會產生錯誤程式碼的問題。b/117527454
  • 更新Room的SQLite文法剖析器,修正造成效能問題的時間過長。b/117401230

2.1.0-alpha01版本

2018年10月8日

新功能

  • FTS:Room 現在支援具備 FTS3 或 FTS4 對應資料表的實體。包含 @Entity 註解的類別現在可以另外加上 @Fts3@Fts4 註解,以宣告有指定對應全文搜尋資料表的類別。您可以透過註解的方法存取 FTS 的進階自訂選項。b/62356416
  • 檢視:Room 現在支援使用 @DatabaseView 註解,將類別宣告為已儲存的查詢,也稱為檢視b/67033276
  • 自動值:Room 現在支援將包含 AutoValue 註解的類別宣告為實體和 POJO。您現在可以透過自動值註解類別的抽象方法宣告 @PrimaryKey@ColumnInfo@Embedded@Relation 這些 Room 註解。請注意,這些註解也必須附上 @CopyAnnotations,這樣 Room 才能正確解讀註解。b/62408420
  • 其他 Rx 傳回類型支援:包含 @Insert@Delete@Update 註解的 DAO 方法現在支援 Rx 傳回類型 CompletableSingle<T>Maybe<T>b/63317956
  • 包含 @Relation 的不可變動類型:Room 先前規定 @Relation 註解欄位必須可供設定,但現在可以是建構函式參數。
  • enableMultiInstanceInvalidation:這是 RoomDatabase.Builder 中的新 API,可為多個採用同一個資料庫檔案的 RoomDatabase 執行個體啟用撤銷機制。這項多執行個體撤銷機制也適用於多個程序。b/62334005
  • fallbackToDestructiveMigrationOnDowngrade:這是 RoomDatabase.Builder 中的新 API,可在發生降級時自動重新建立資料庫。b/110416954
  • ignoredColumns:這是 @Entity 註解中的新 API,可依名稱列出遭忽略的欄位。適合用於忽略特定實體的沿用欄位。b/63522075

API/行為變更

  • RoomDatabase 中的 mCallbackmDatabase 現已透過 @Deprecated 淘汰,將在下一個 Room 的主要版本中移除。b/76109329

修正錯誤

  • 修正了 Room 在初始化期間無法正確地從資料庫毀損或遷移無效錯誤中復原的兩個問題。b/111504749b/111519144
  • Room 現在會正確地使用資料類別中的 Kotlin 主要建構函式,而不必將該欄位宣告為 varsb/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 和資料庫實作現已定案

修正錯誤

  • 在「找不到欄位的 getter」錯誤訊息中指定類別/欄位名稱 b/73334503
  • 修正了 RoomOpenHelper 與 Room 較舊版本的回溯相容性問題 b/110197391

Pre-AndroidX依附元件

使用較舊的AndroidX版本時,請加入以下依附元件:

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日

1.1.1」會議室與「1.1.1-rc1」會議室相同。

1.1.1-rc1版本

2018年5月16日如要使用遷移作業,我們強烈建議使用1.1.1-rc1Room,而非1.1.0

修正了 Room 無法正確地處理遷移後初始化作業的問題 b/79362399

1.1.0版本

1.1.0-beta3版本

2018年4月19日

修正錯誤

  • 修正在Kotlin POJO參照在Javab/78199923中定義的關聯實體時發生的編譯錯誤

1.1.0-beta2版本

2018年4月5日

修正錯誤

  • 修正了 Room 的 Rx SingleMaybe 實作中提前回收查詢的重大錯誤;在該錯誤的影響下,如果您在傳回的 SingleMaybe 執行個體中加入超過 1 個觀測工具,就會發生問題。b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables]不會在交易中呼叫VACUUM資料庫。b/77235565

1.1.0-beta1版本

2018年3月21日

API變更

  • 根據 API 審查意見回饋,@RawQuery 不再接受傳遞 String 做為查詢參數。您必須使用[SupportSQLiteQuery][ref-SupportSQLiteQuery]。(請參閱[SimpleSQLiteQuery][ref-SimpleSQLiteQuery] 即可輕鬆建立支援引數的[SupportSQLiteQuery][ref-SupportSQLiteQuery]執行個體)。
  • RoomDatabase.Builder的[fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom]方法現在接受使用vararg int,而不是vararg Integer

修正錯誤

  • [RoomDatabase.clearAllTables][ref-clearAllTables] 現在會嘗試設定 WAL 檢查點並對資料庫執行 VACUUM 操作,將空間還給作業系統。
  • [@RawQuery][ref-RawQuery] 現在接受在 observedEntities 屬性中使用任何 Pojo,前提是 Pojo 透過其 Embedded 欄位或 Relation 參照了一或多個實體。b/74041772
  • Paging:Room 的 DataSource 實作現在能夠正確地處理多資料表依附元件 (例如關係和彙整項目)。先前,這些動作可能無法觸發新結果,也可能無法編譯。b/74128314

1.1.0-alpha1版本

2018年1月22日

新功能

  • RawQuery:這個新的 API 允許 @Dao 方法接收 SQL 做為查詢參數 b/62103290b/71458963
  • fallBackToDestructiveMigrationsFromRoomDatabase.Builder 中的這個新的 API 可讓您精細掌控要從哪個起始結構定義版本允許破壞性遷移 (與 fallbackToDestructiveMigration 相比) b/64989640
  • Room 現在僅支援新版 Paging API (alpha-4 以上版本),不再支援已淘汰的 LivePagedListProvider。如要使用新的 Room Alpha 版,您必須使用 Paging alpha-4 以上版本,並從 LivePagedListProvider 切換至 LivePagedListBuilder (如果尚未這麼做的話)。

修正錯誤

  • 改善對 Kotlin Kapt 類型的支援。b/69164099
  • 欄位順序不再使結構定義失效。b/64290754