Room

Thư viện lưu trữ Room cung cấp một lớp trừu tượng qua SQLite để mang lại khả năng truy cập cơ sở dữ liệu mạnh mẽ hơn, đồng thời khai thác toàn bộ sức mạnh của SQLite.
Bản cập nhật mới nhất Bản phát hành ổn định Bản phát hành dùng thử Bản phát hành beta Bản phát hành alpha
Ngày 11 tháng 1 năm 2023 2.5.0 - - -

Khai báo phần phụ thuộc

Để thêm một phần phụ thuộc trên Room, bạn phải thêm kho lưu trữ Google Maven vào dự án. Đọc nội dung Kho lưu trữ Maven của Google để biết thêm thông tin.

Các phần phụ thuộc cho Room bao gồm kiểm thử di chuyển RoomRoom RxJava

Thêm các phần phụ thuộc cho cấu phần phần mềm bạn cần trong tệp build.gradle cho ứng dụng hoặc mô-đun:

Groovy

dependencies {
    def room_version = "2.5.0"

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

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

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

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

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

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

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

Kotlin

dependencies {
    val room_version = "2.5.0"

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

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

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

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

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

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

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

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

Để biết thông tin về cách sử dụng các phần mở rộng Kotlin, hãy xem tài liệu ktx.

Để biết thêm thông tin về các phần phụ thuộc, hãy xem bài viết Thêm phần phụ thuộc của bản dựng.

Đối với các thư viện không thuộc Android (tức là các mô-đun Gradle chỉ dùng Java hoặc Kotlin), bạn có thể tuỳ ý phụ thuộc vào androidx.room:room-common để sử dụng chú thích Room.

Định cấu hình các tuỳ chọn trình biên dịch

Room có các tuỳ chọn bộ xử lý chú giải sau:

  • room.schemaLocation: Định cấu hình và bật tính năng xuất giản đồ cơ sở dữ liệu vào tệp JSON trong thư mục cụ thể. Xem phần Di chuyển Room để biết thêm thông tin.
  • room.incremental: Bật trình xử lý chú giải gia tăng cho Gradle.

Ví dụ về cách định cấu hình các tuỳ chọn này được thể hiện trong đoạn mã sau đây:

Groovy

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

Kotlin

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

Ý kiến phản hồi

Ý kiến phản hồi của bạn có thể giúp chúng tôi cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể thêm lượt bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.

Báo lỗi mới

Xem tài liệu về Công cụ theo dõi lỗi để biết thêm thông tin.

Phiên bản 2.5.0

Phiên bản 2.5.0

Ngày 11 tháng 1 năm 2023

Phát hành androidx.room:room-*:2.5.0. Phiên bản 2.5.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 2.4.0

  • Toàn bộ nguồn room-runtime đã được chuyển đổi từ Java sang Kotlin. Xin lưu ý rằng bạn có thể gặp phải các vấn đề về khả năng không tương thích nguồn nếu mã nằm trong Kotlin do quá trình chuyển đổi thư viện sang Kotlin. Ví dụ: sự thay đổi không tương thích với nguồn đã biết là trong InvalidationTracker, giờ đây, bạn sẽ cần khai báo onInvalidate() trong Observer để có tham số loại Set chứ không phải MutableSet. Hơn nữa, một số phương thức getter nhất định được chuyển đổi thành các thuộc tính yêu cầu cú pháp truy cập vào thuộc tính trên các tệp Kotlin. Vui lòng báo cáo lỗi nếu có bất kỳ sự cố không tương thích đáng kể nào.
  • Thêm một chú giải mới cho lối tắt (@Upsert) để cố gắng chèn một thực thể khi không có xung đột về tính riêng biệt hoặc cập nhật thực thể nếu có xung đột. (I7aaab, b/241964353)
  • Thêm các cấu phần phần mềm room-paging room-paging-rxjava2, room-paging-rxjava3room-paging-guava để hỗ trợ trong Room Paging.
  • Thêm các API nhằm cung cấp tên bảng giá trị và khoá để phân định trong @MapInfo (Icc4b5)

Phiên bản 2.5.0-rc01

Ngày 7 tháng 12 năm 2022

Phát hành androidx.room:room-*:2.5.0-rc01. Phiên bản 2.5.0-rc01 bao gồm các thay đổi sau.

  • Bản phát hành này tương tự như phiên bản 2.5.0-beta02.

Phiên bản 2.5.0-beta02

Ngày 9 tháng 11 năm 2022

Phát hành androidx.room:room-*:2.5.0-beta02. Phiên bản 2.5.0-beta02 bao gồm các thay đổi sau.

Các thay đổi về API

  • Khắc phục nhiều API lấy đối số truy vấn từ mảng bất biến (Array<Any?>) thành mảng phản biến (Array<out Any?>) để khớp với hành vi mảng của Java. (b/253531073)

Phiên bản 2.5.0-beta01

Ngày 5 tháng 10 năm 2022

Phát hành androidx.room:room-*:2.5.0-beta01. Phiên bản 2.5.0-beta01 bao gồm các thay đổi sau.

Các thay đổi về API

  • API 16 là phiên bản tối thiểu duy nhất hỗ trợ @Upsert. Nguyên nhân là do không thể xác định xung đột ràng buộc khoá chính trong các API cũ. (I5f67f, b/243039555)

Sửa lỗi

  • Khắc phục vấn đề các bảng bóng đổ bị xuất không chính xác sang tệp .json trong giản đồ, dẫn đến làm hỏng các bảng này. (I4f83b, b/246751839)

Phiên bản 2.5.0-alpha03

Ngày 24 tháng 8 năm 2022

Phát hành androidx.room:room-*:2.5.0-alpha03. Phiên bản 2.5.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm một chú giải mới cho lối tắt (@Upsert) để cố gắng chèn một thực thể khi không có xung đột về tính riêng biệt hoặc cập nhật thực thể nếu có xung đột. (I7aaab, b/241964353)

Sửa lỗi

  • Giờ đây, Room sẽ gửi SQLiteConstraintException thay vì IllegalStateException trong quá trình kiểm tra lỗi ràng buộc về khoá ngoại tự động di chuyển (auto-migration foreign key). (I328dd)
  • Khắc phục một lỗi thay đổi không tương thích với nguồn Kotlin cho phương thức getter/các thuộc tính của getOpenHelper, getQueryExecutorgetTransactionExecutor. (Iad0ac)

Phiên bản 2.5.0-alpha02

Ngày 1 tháng 6 năm 2022

Phát hành androidx.room:room-*:2.5.0-alpha02. Phiên bản 2.5.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

Thay đổi về API

  • Toàn bộ room-runtime đã được chuyển đổi từ Java sang Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)

    Lưu ý: Bạn có thể gặp phải các vấn đề về khả năng không tương thích nguồn do quá trình chuyển đổi thư viện sang Kotlin. Nếu mã của bạn nằm trong Kotlin và gọi phiên bản cũ của Room, thì phiên bản mới sẽ cần xử lý những trường hợp này. Ví dụ: một thay đổi không tương thích với nguồn đã biết là trong InvalidationTracker, giờ đây bạn sẽ cần khai báo onInvalidate() trong Observer để có tham số loại Set chứ không phải MutableSet.

  • Thêm các API nhằm cung cấp tên bảng giá trị và khoá để phân định trong @MapInfo (Icc4b5)
  • Khắc phục vấn đề về khả năng tương thích với nguồn để tái cho phép @Ignore trong phương thức getter cho thuộc tính. (Ifc2fb)

Sửa lỗi

  • Thuật toán phỏng đoán về độ phân giải của cột trùng lặp. Room sẽ nỗ lực để phân giải các cột không rõ ràng trong một truy vấn có cấu trúc đa ánh xạ. Điều này cho phép JOIN có các bảng chứa bảng cùng tên được ánh xạ chính xác tới một đối tượng dữ liệu kết quả. (I4b444, b/201306012, b/212279118)

Phiên bản 2.5.0-alpha01

Ngày 23 tháng 2 năm 2022

Phát hành androidx.room:room-*:2.5.0-alpha01. Phiên bản 2.5.0-alpha01 bao gồm các thay đổi sau.

Thay đổi về API

  • Khắc phục vấn đề không thực thi được việc sử dụng Room @IntDef trong các nguồn Kotlin. (I75f41, b/217951311)
  • Khắc phục vấn đề về khả năng tương thích với nguồn để tái cho phép @Query trong phương thức getter cho thuộc tính. (I0a09b)
  • Chuyển đổi room-common từ Java sang Kotlin. (I69c48, b/206858235)

    Lưu ý: Bạn có thể gặp phải vấn đề về khả năng không tương thích với nguồn vì một số thuộc tính đã được chuyển sang các đối tượng đồng hành (companion) trong quá trình chuyển đổi thư viện sang Kotlin. Nếu mã của bạn được viết bằng Kotlin và gọi phiên bản cũ của Room, thì phiên bản mới sẽ cần hậu tố ".Companion" khi truy cập vào các thuộc tính này.

  • Chuyển đổi room-migration từ Java sang Kotlin. (I2724b, b/206858622)
  • Chuyển đổi các tệp liên quan đến paging trong room-runtime từ Java sang Kotlin. (I82fc8, b/206859668)
  • Thêm API để khoá và sử dụng đa tiến trình ở cấp FrameworkSQLite* nhằm đảm bảo việc khởi tạo và di chuyển cơ sở dữ liệu lần đầu tiên theo nhiều tiến trình. (Ied267, b/193182592)

Sửa lỗi

  • Thêm tính năng hỗ trợ cho các thuộc tính nội bộ trong nguồn Kotlin. Đây là sự thay đổi nhỏ về hành vi trong Room, trong đó ứng dụng sẽ dùng tên nguồn của các hàm trong khi so khớp chúng với các thuộc tính dưới dạng phương thức getter/setter (trước đây, ứng dụng sử dụng tên JVM của hàm khác với hàm/thuộc tính nội bộ). Nếu bạn đang sử dụng chú thích @JvmName tuỳ chỉnh để so khớp phương thức getter/setter với thuộc tính riêng tư, vui lòng kiểm tra kỹ mã đã tạo sau lần cập nhật (If6531, b/205289020)

Phiên bản 2.4.3

Phiên bản 2.4.3

Ngày 27 tháng 7 năm 2022

Phát hành androidx.room:room-*:2.4.3. Phiên bản 2.4.3 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục sự cố khiến Room không nhận dạng được các hàm tạm ngưng trong Kotlin 1.7 (b/236612358)

Phiên bản 2.4.2

Phiên bản 2.4.2

Ngày 23 tháng 2 năm 2022

Phát hành androidx.room:room-*:2.4.2. Phiên bản 2.4.2 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề khi tạo mã cho hàm tạm ngưng Dao @Transaction với một nội dung tạo một phương thức giao diện mặc định do quá trình biên dịch có -Xjvm-default=all hoặc tương đương. (Ia4ce5)
  • Xử lý lỗi khi Room tạo mã cho phương thức truy vấn kiểu dữ liệu trả về Array<ByteArray>. (If086e, b/213789489)

Phiên bản 2.4.1

Phiên bản 2.4.1

Ngày 12 tháng 1 năm 2022

Phát hành androidx.room:room-*:2.4.1. Phiên bản 2.4.1 bao gồm các thay đổi sau.

Sửa lỗi

  • Thêm tính năng hỗ trợ cho các thuộc tính nội bộ trong nguồn Kotlin. Đây là sự thay đổi nhỏ về hành vi trong Room, trong đó ứng dụng sẽ dùng tên nguồn của các hàm trong khi so khớp chúng với các thuộc tính dưới dạng phương thức getter/setter (trước đây, ứng dụng sử dụng tên JVM của hàm khác với hàm/thuộc tính nội bộ). Nếu bạn đang sử dụng chú thích @JvmName tuỳ chỉnh để so khớp phương thức getter/setter với thuộc tính riêng tư, vui lòng kiểm tra kỹ mã đã tạo sau lần cập nhật (If6531, b/205289020)

Phiên bản 2.4.0

Phiên bản 2.4.0

Ngày 15 tháng 12 năm 2021

Phát hành androidx.room:room-*:2.4.0. Phiên bản 2.4.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 2.3.0

  • Tự động di chuyển (auto-migration): Room hiện cung cấp một API để tự động tạo các lượt di chuyển, miễn là bạn đã xuất giản đồ. Để thông báo rằng Room cần tạo một hành động tự động di chuyển, bạn có thể dùng một thuộc tính mới @Database#autoMigrations để khai báo các phiên bản được tự động di chuyển qua lại. Khi Room cần thêm thông tin về việc thay đổi tên hoặc xoá bảng và cột, thì chú thích @AutoMigration có thể khai báo một lớp tham số chứa các thông tin đầu vào đó. Xem tài liệu @AutoMigration để biết thêm thông tin chi tiết.
  • Chèn phần phụ thuộc trong Tự động di chuyển: @ProvidedAutoMigrationSpec là một API mới để khai báo rằng AutoMigrationSpec sẽ được cung cấp trong thời gian chạy thông qua RoomDatabase.Builder#addAutoMigrationSpec(). Điều này cho phép một khung chèn phần phụ thuộc nhằm cung cấp các quy cách đó khi chúng cần các phần phụ thuộc phức tạp.
  • Trình trợ giúp kiểm tra di chuyển hỗ trợ tính năng tự động di chuyển: MigrationTestHelper của Room đã được cập nhật để hỗ trợ tính năng tự động di chuyển bằng cách cung cấp một API hàm khởi tạo mới nhận lớp cơ sở dữ liệu đang được kiểm thử. Điều này cho phép trình trợ giúp tự động thêm tính năng tự động di chuyển theo cách tương tự như trong runMigrationsAndValidate.
  • Hỗ trợ Room-Paging: androidx.room:room-paging được phát hành, hỗ trợ Paging 3.0 gốc cho các truy vấn Room trả về androidx.paging.PagingSource.
  • Các phương pháp truy vấn quan hệ: Room nay hỗ trợ các phương thức @Dao trả về đa bản đồ (multimap), hữu ích cho câu lệnh JOIN. Các loại đa bản đồ được hỗ trợ là Map, SparseArray, LongSparseArray, cùng với ImmutableMap, ImmutableSetMultimapImmutableListMultimap của Guava.

Phiên bản 2.4.0-rc01

Ngày 1 tháng 12 năm 2021

Phát hành androidx.room:room-*:2.4.0-rc01. Phiên bản 2.4.0-rc01 bao gồm các thay đổi sau.

Tính năng mới

  • Cập nhật phần phụ thuộc của Room trên KSP thành 1.6.0-1.0.1 để hỗ trợ Kotlin 1.6

Phiên bản 2.4.0-beta02

Ngày 17 tháng 11 năm 2021

Phát hành androidx.room:room-*:2.4.0-beta02. Phiên bản 2.4.0-beta02 bao gồm các thay đổi sau.

Tính năng mới

  • Chúng tôi bổ sung hỗ trợ cho SparseArray và LongSparseArray trong @MapInfo. (Ic91a2b/138910317)

Sửa lỗi

  • Chúng tôi bổ sung một trình phân tích TypeConverter mới có tính đến thông tin về tính chất rỗng của các kiểu. Vì thông tin này chỉ có trong KSP, nên thông tin này được bật theo mặc định chỉ trong KSP. Nếu phương thức này gây ra vấn đề gì, bạn có thể tắt chế độ này bằng cách chuyển room.useNullAwareTypeanalysis=false đến bộ xử lý chú giải. Nếu điều đó xảy ra, vui lòng báo cáo một lỗi vì cờ này sau này sẽ bị xoá. Với trình phân tích TypeConverter mới này, bạn chỉ nên cung cấp các Typeconverters loại không có giá trị rỗng nhận TypeConverters làm trình phân tích mới có khả năng bọc chúng trong một chức năng kiểm tra giá trị rỗng. Xin lưu ý rằng việc này không ảnh hưởng đến những người dùng sử dụng KAPT hoặc Java làm bộ xử lý chú giải (không giống như KSP), không có thông tin về tính chất rỗng cho các kiểu. (Ia88f9, b/193437407)
  • Khắc phục lỗi Room không biên dịch được kèm theo lỗi SQL khi một thực thể FTS khai báo sử dụng trình tạo mã thông báo ICU. (I00db9, b/201753224)
  • Giải quyết vấn đề trong chế độ tự động dịch chuyển khi một cột mới được thêm vào một thực thể được nhúng giữa các phiên bản. (I5fcb1b/193798291)
  • Chúng tôi đã giải quyết vấn đề liên quan đến các loại trả về của phương thức truy vấn quan hệ trong các truy vấn LEFT JOIN. Với những thay đổi này, trong trường hợp có ánh xạ 1 với nhiều, tập hợp trả về cho một khoá sẽ không bao gồm đối tượng có giá trị không hợp lệ nếu không tìm thấy đối tượng trong con trỏ. Nếu không tìm thấy giá trị hợp lệ, thì khoá sẽ được ánh xạ tới một tập hợp trống. (Id5552b/201946438)
  • Giải quyết vấn đề tự động di chuyển khi từ khoá SQLite không được loại bỏ trong tên cột. (Idbed4b/197133152)

Phiên bản 2.4.0-beta01

Ngày 13 tháng 10 năm 2021

Phát hành androidx.room:room-*:2.4.0-beta01. Phiên bản 2.4.0-beta01 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề khi quá trình tự động di chuyển không thêm các cột mới trong khi một bảng khác trong cùng quá trình tự động di chuyển cũng có một cột mới trùng tên. (Ia5db5, b/200818663)
  • Việc triển khai PagingSource tạo bởi room-paging hiện sẽ sử dụng queryExecutor truyền qua RoomDatabase.Builder, thay vì Dispatchers.IO như trước đây, do đó, nó có thể được ghi đè. (Iae259)

Phiên bản 2.4.0-alpha05

Ngày 29 tháng 9 năm 2021

Phát hành androidx.room:room-*:2.4.0-alpha05. Phiên bản 2.4.0-alpha05 bao gồm các thay đổi sau.

Tính năng mới

Thay đổi về API

  • Thêm một thuộc tính mới vào chú thích TypeConverters để cho phép nhà phát triển tắt trình chuyển đổi tích hợp Enum và UUID. Theo mặc định, những trình chuyển đổi này sẽ ở trạng thái bật nhưng bạn có thể tắt trong một phạm vi nhất định hoặc cho toàn bộ cơ sở dữ liệu. Xem tài liệu về TypeConverters để biết thông tin chi tiết. (36ae9e, b/195413406)

  • Hỗ trợ khoá/giá trị không phải POJO cho các loại trả về Multimap trong DAO thông qua chú thích @MapInfo. (I4d704)

@MapInfo sẽ được yêu cầu khi cột khoá hoặc giá trị của bản đồ đều từ một cột duy nhất. Hãy xem ví dụ sau:

@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>
  • Đặt room-paging làm cấu phần phần mềm bắt buộc khi sử dụng Paging3 với Room. (Ieaffe)

Sửa lỗi

  • Khắc phục vấn đề khi các kết quả truy vấn đa bản đồ không được sắp xếp đúng cách khi truy vấn đó chứa mệnh đề ORDER BY (SẮP XẾP THEO) của một cột từ khoá của bản đồ. (I6b887)

Đóng góp bên ngoài

  • Thêm API mới để chỉ định thứ tự các mục trong @Index. Nhờ có Nikita Zhelonkin. (I033fc)

Phiên bản 2.4.0-alpha04

Ngày 21 tháng 7 năm 2021

Phát hành androidx.room:room-*:2.4.0-alpha04. Phiên bản 2.4.0-alpha04 bao gồm các thay đổi sau.

Tính năng mới

  • Room nay hỗ trợ các phương thức @Dao trả về đa bản đồ, hữu ích cho câu lệnh JOIN. Các loại đa bản đồ được hỗ trợ là Map cùng với ImmutableMap, ImmutableSetMultimapImmutableListMultimap của Guava.

    Sau đây là ví dụ về các truy vấn đa bản đồ:

    Bản đồ mối quan hệ một với một

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

    Bản đồ mối quan hệ một với nhiều (đa bản đồ tiêu chuẩn)

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

    Kết quả đa bản đồ cũng có thể được gói gọn trong các loại trả về không đồng bộ được hỗ trợ, chẳng hạn như LiveData, Observable của Rx hoặc coroutine Flow.

Room-Paging

  • androidx.room:room-paging được phát hành, cung cấp dịch vụ hỗ trợ Paging 3.0 gốc cho các cụm từ tìm kiếm của Room trả về androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • Cấu phần phần mềm này thay thế hoạt động triển khai androidx.paging.PagingSource do Room tạo bằng một cấu hình được tạo trên API Paging 3.0. Việc triển khai PagingSource mới sẽ phân tích cú pháp các khoá theo nhiều cách. Vì vậy, mọi khoá được cung cấp theo cách thủ công cho PagingSource của Room sẽ phải xét đến sự thay đổi hành vi này, bao gồm cả initialKey được truyền qua hàm khởi tạo của Pager. Các trang sẽ bắt đầu tải từ Key, trong đó Key là mục được tải đầu tiên. Điều này sẽ khác với hành vi hiện tại khi LoadParams.Refresh.Key được coi là vị trí cuộn của người dùng và các mục được tải cả trước và sau khoá.

  • Cấu phần phần mềm này là không bắt buộc và việc chọn không sử dụng sẽ khôi phục lại tính năng hỗ trợ hiện có cho Paging 3.0 đã được giới thiệu trong Room 2.3. Tuy nhiên, cấu phần phần mềm này sẽ là bắt buộc trong bản phát hành sau này đối với những người sử dụng Room với Paging 3.0. Để chọn sử dụng, hãy thêm cấu phần phần mềm room-paging vào classpath. Nếu đang sử dụng Gradle, bạn có thể thêm đoạn mã sau đây vào build.grade:

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

Sửa lỗi

  • Khắc phục vấn đề trong di chuyển tự động liên quan đến việc xử lý các lỗi vi phạm khoá ngoại. (b/190113935)

Phiên bản 2.4.0-alpha03

Ngày 16 tháng 6 năm 2021

Phát hành androidx.room:room-*:2.4.0-alpha03. Phiên bản 2.4.0-alpha03 bao gồm các thay đổi sau.

Thay đổi về API

  • Cập nhật MigrationTestHelper của Room để hỗ trợ quá trình di chuyển tự động bằng cách cung cấp một API hàm khởi tạo mới nhận lớp cơ sở dữ liệu đang được kiểm thử. Điều này cho phép trình trợ giúp tự động thêm tính năng tự động di chuyển theo cách tương tự như trong runMigrationsAndValidate.

Sửa lỗi

  • Khắc phục vấn đề với thư viện gốc SQLite của Room để hỗ trợ chip M1 của Apple. (b/174695268

  • Khắc phục vấn đề Room không gặp lỗi khi kiểu dữ liệu trả về của hàm @Transaction là một Flow (Luồng) (I56ddd, b/190075899)

  • Khắc phục vấn đề trong quá trình di chuyển tự động liên quan đến các chỉ mục. b/177673291

Thông tin cập nhật về phần phụ thuộc

  • Hỗ trợ KSP của Room hiện tại tuỳ thuộc vào KSP 1.5.10-1.0.0-beta01. (1ecb11, b/160322705)

Phiên bản 2.4.0-alpha02

Ngày 5 tháng 5 năm 2021

Phát hành androidx.room:room-*:2.4.0-alpha02. Phiên bản 2.4.0-alpha02 bao gồm các thay đổi sau.

Thay đổi về API

  • @ProvidedAutoMigrationSpec là một API mới dùng để khai báo rằng AutoMigrationSpec sẽ được cung cấp trong thời gian chạy thông qua RoomDatabase.Builder#addAutoMigrationSpec(). Điều này cho phép một khung chèn phần phụ thuộc nhằm cung cấp các quy cách đó khi chúng cần các phần phụ thuộc phức tạp.

Sửa lỗi

  • Khắc phục vấn đề với việc di chuyển tự động khi @DatabaseView không được tạo lại đúng cách.

Đóng góp bên ngoài

  • Khắc phục vấn đề trong JournalMode.TRUNCATE của Room khiến cho lệnh gọi lại InvalidationTracker đôi khi bị gọi không hợp lệ, quá trễ hoặc hoàn toàn không gọi được. Nhờ có Uli Bubenheimer | bubenheimer@users.noreply.github.com (b/154040286)

Phiên bản 2.4.0-alpha01

Ngày 21 tháng 4 năm 2021

Phát hành androidx.room:room-*:2.4.0-alpha01. Phiên bản 2.4.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • Tự động di chuyển (auto-migration): Room hiện cung cấp một API để tự động tạo các lượt di chuyển, miễn là bạn đã xuất giản đồ. Để thông báo rằng Room cần tạo một hành động tự động di chuyển, bạn có thể dùng một thuộc tính mới @Database#autoMigrations để khai báo các phiên bản được tự động di chuyển qua lại. Khi Room cần thêm thông tin về việc thay đổi tên hoặc xoá bảng và cột, thì chú thích @AutoMigration có thể khai báo một lớp tham số chứa các thông tin đầu vào đó. Xem tài liệu @AutoMigration để biết thêm thông tin chi tiết.

Sửa lỗi

  • Khắc phục vấn đề khi hệ thống xác thực giản đồ của Room đã xác thực không chính xác defaultValue thừa dấu ngoặc. b/182284899

Phiên bản 2.3.0

Phiên bản 2.3.0

Ngày 21 tháng 4 năm 2021

Phát hành androidx.room:room-*:2.3.0. Phiên bản 2.3.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 2.2.0

  • Hỗ trợ Enum tích hợp sẵn: Hiện tại, Room sẽ mặc định sử dụng trình chuyển đổi kiểu dữ liệu Enum sang String và ngược lại nếu không có tuỳ chọn nào được cung cấp. Nếu đã có sẵn một trình chuyển đổi kiểu dữ liệu cho enum (một tập hợp giá trị có thể có của một thuộc tính), thì Room sẽ ưu tiên sử dụng trình chuyển đổi đó thay vì trình chuyển đổi mặc định.
  • Gọi lại truy vấn: Room hiện cung cấp một Callback API RoomDatabase.QueryCallback khi có các truy vấn sắp được thực thi. Điều này có thể hữu ích cho việc ghi lại các bản gỡ lỗi. Bạn có thể đặt lệnh gọi lại qua RoomDatabase.Builder#setQueryCallback().
  • Cải tiến phần đóng gói trước: Room hiện có các API để tạo cơ sở dữ liệu bằng cách sử dụng cơ sở dữ liệu đóng gói trước được đọc từ luồng dữ liệu đầu vào. Điều này cho phép các trường hợp như khi cơ sở dữ liệu đóng gói trước được nén.
  • Cung cấp trình chuyển đổi kiểu dữ liệu: Room hiện có các API để cung cấp thực thể trình chuyển đổi kiểu dữ liệu giúp ứng dụng kiểm soát việc khởi chạy các trình chuyển đổi đó. Để đánh dấu một trình chuyển đổi kiểu sẽ được cung cấp cho Room, hãy sử dụng chú thích mới @ProvidedTypeSwitcher.
  • Hỗ trợ RxJava3: Room nay hỗ trợ các loại RxJava3. Tương tự như RxJava2, bạn có thể khai báo các phương thức DAO có loại trả về là Flowable, Single, Maybe và Completable. Ngoài ra, còn có một cấu phần phần mềm mới androidx.room:room-rxjava3 hỗ trợ RxJava3.
  • Hỗ trợ Paging 3.0: Nay Room sẽ hỗ trợ việc triển khai cho các phương thức chú thích @Query có loại trả về là androidx.paging.PagingSource.

Phiên bản 2.3.0-rc01

Ngày 24 tháng 3 năm 2021

Phát hành androidx.room:room-*:2.3.0-rc01. Phiên bản 2.3.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề đã ngăn việc sử dụng các truy vấn Coroutine FLow do Room tạo trong một khối withTransaction đang tạm ngưng. (I797bf)

Phiên bản 2.3.0-beta03

Ngày 10 tháng 3 năm 2021

Phát hành androidx.room:room-*:2.3.0-beta03. Phiên bản 2.3.0-beta03 bao gồm các thay đổi sau.

Tính năng mới

Sửa lỗi

  • Sửa lỗi khi việc tạo PagingSource trên chuỗi chính có thể kích hoạt lỗi ANR. (I42b74, b/181221318)
  • Đặt chế độ hiển thị @ExperimentalRoomApi ở chế độ công khai thay vì chế độ riêng tư của gói. (b/181356119)

Đóng góp bên ngoài

  • Cho phép Room chấp nhận loại trả về POJO trong phương thức DAO được chú thích @Query khi nó cũng được chú thích bằng @SkipQueryVerification. Room sẽ cố gắng chuyển đổi kết quả truy vấn sang loại trả về POJO theo cách tương tự như đối với phương thức DAO được chú thích của @RawQuery. Nhờ có "Markus Riegel" | hey@marcorei.com'. (I45acb)

Phiên bản 2.3.0-beta02

Ngày 18 tháng 2 năm 2021

Phát hành androidx.room:room-*:2.3.0-beta02. Phiên bản 2.3.0-beta02 bao gồm các thay đổi sau.

Tính năng mới

  • Room nay hỗ trợ thử nghiệm cho Kotlin Symbol Processing KSP.

    KSP thay thế cho KAPT để chạy các trình xử lý chú giải vốn có trên trình biên dịch Kotlin, giúp giảm đáng kể thời gian tạo bản dựng.

    Để sử dụng Room với KSP, bạn có thể áp dụng trình bổ trợ KSP Gradle và thay thế cấu hình kapt trong tệp bản dựng bằng ksp. Ví dụ: thay vì kapt 'androidx.room:room-compiler:2.3.0-beta02', hãy sử dụng ksp 'androidx.room:room-compiler:2.3.0-beta02'. Xem tài liệu về KSP để biết thêm thông tin chi tiết.

    Lưu ý rằng vì KSP đang trong quá trình thử nghiệm, bạn vẫn nên sử dụng KAPT cho mã sản xuất. Việc giảm thời gian xây dựng chỉ có thể áp dụng khi không có trình xử lý nào khác dùng KAPT. Xem b/160322705 để nắm được các lỗi đã biết.

Phiên bản 2.3.0-beta01

Ngày 27 tháng 1 năm 2021

androidx.room:room-*:2.3.0-beta01 được phát hành. Phiên bản 2.3.0-beta01 bao gồm các thay đổi sau.

Tính năng mới

  • Cơ sở dữ liệu tự động đóng: Room nay có khả năng đóng các cơ sở dữ liệu không được truy cập sau một khoảng thời gian nhất định. Đây là tính năng thử nghiệm và có thể bật bằng cách gọi RoomDatabase.Builder#setAutoCloseTimeout(). Tính năng này hữu ích cho các ứng dụng có nhiều cơ sở dữ liệu.

Sửa lỗi

  • Khắc phục vấn đề về việc các phương thức Dao có nhiều phương thức @Update hoặc @Delete với các chiến lược xung đột sẽ tạo ra mã chỉ với một trong những chiến lược đó, bỏ qua chiến lược đã xác định. (/I0b90d, b/176138543)

Phiên bản 2.3.0-alpha04

Ngày 16 tháng 12 năm 2020

Phát hành androidx.room:room-*:2.3.0-alpha04. Phiên bản 2.3.0-alpha04 bao gồm các thay đổi sau.

Tính năng mới

  • Room nay cung cấp API gọi lại chung RoomDatabase.QueryCallback dùng khi các cụm từ tìm kiếm sắp thực thi. Điều này có thể hữu ích cho việc ghi nhật ký các bản dựng gỡ lỗi. Bạn có thể đặt lệnh gọi lại qua RoomDatabase.Builder#setQueryCallback(). (Iaa513, b/174478034, b/74877608)
  • Room hiện sẽ mặc định sử dụng trình chuyển đổi kiểu dữ liệu Enum sang String và ngược lại nếu không có tuỳ chọn nào được cung cấp. Nếu đã có sẵn một trình chuyển đổi kiểu dữ liệu cho enum (một tập hợp giá trị có thể có của một thuộc tính), thì Room sẽ ưu tiên sử dụng trình chuyển đổi đó thay vì trình chuyển đổi mặc định. (b/73132006)

Vấn đề đã biết

  • Nếu đã có một trình chuyển đổi loại một chiều cho Enum, thì Room có thể vô tình sử dụng trình chuyển đổi String sang Enum được tích hợp sẵn. Đây có thể là điều không được mong muốn. Vấn đề này đã được biết và có thể khắc phục bằng cách chuyển thành chuyển đổi hai chiều. Xem: b/175707691

Sửa lỗi

  • Khắc phục vấn đề Room sẽ vô hiệu hoá không chính xác quá trình xử lý chú giải gia tăng trong các phiên bản JDK mới hơn. (b/171387388)
  • Khắc phục vấn đề về việc Room tìm thấy lớp được tạo khi sử dụng nhiều trình tải lớp. Nhờ có bản sửa lỗi "Serendipity | 892449346@qq.com!" (b/170141113)
  • Khắc phục vấn đề Room sẽ tạo mã không chính xác khi một Kotlin @Dao có một lớp cơ sở có các tham số chung là các dữ liệu nguyên gốc trong JVM. (b/160258066)

Đóng góp bên ngoài

  • Giờ đây Room sẽ mặc định sử dụng beginTransactionNonExclusive nếu chế độ WAL được bật và API từ 16 trở lên. Nhờ có "Ahmed I". Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)

Phiên bản 2.3.0-alpha03

Ngày 14 tháng 10 năm 2020

Phát hành androidx.room:room-*:2.3.0-alpha03. Phiên bản 2.3.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • Các trình chuyển đổi kiểu được cung cấp: Room nay có API để cung cấp các phiên bản trình chuyển đổi loại giúp ứng dụng kiểm soát việc khởi chạy của các trình chuyển đổi đó. Để đánh dấu một trình chuyển đổi kiểu sẽ được cung cấp cho Room, hãy sử dụng chú thích mới @ProvidedTypeConverter. Nhờ có "mzgreen yairobbe@gmail.com". (Ie4fa5, b/121067210)

  • Room hiện có các API để tạo cơ sở dữ liệu bằng cách sử dụng cơ sở dữ liệu đóng gói trước được đọc từ luồng dữ liệu đầu vào. Điều này cho phép các trường hợp như khi cơ sở dữ liệu đóng gói trước được nén. Nhờ có "Ahmed El-Helw ahmedre@gmail.com" (3e6792, b/146911060)

Thay đổi về API

  • Thêm mục tiêu còn thiếu vào chú thích @ForeignKey để ngăn việc sử dụng bên ngoài chú thích @Entity. (Iced1e)

  • Trường mCallbacks trong RoomDatabase.java nay bị ẩn. (d576cb, b/76109329)

Sửa lỗi

  • Cập nhật tài liệu về TypeConverters để làm rõ rằng bạn chỉ có thể sử dụng TypeConverters để chuyển đổi cột/trường chứ không phải hàng. (I07c56, b/77307836)

  • Cập nhật lên DaoProcessor để khắc phục lỗi trình biên dịch trên Dao bằng một loại siêu cấp chung với "các dữ liệu nguyên bản" Kotlin. (Ice6bb, b/160258066)

  • Cập nhật tài liệu về phương thức thêm/xoá trình quan sát để làm rõ luồng (Ifd1d9, b/153948821)

  • Khắc phục vấn đề về việc Room xác thực không chính xác bảng FTS khi khai báo cột rowid. (d62ebc, b/145858914)

Đóng góp bên ngoài

  • Khắc phục các vấn đề về ngôn ngữ viết hoa/chữ thường liên quan đến tiếng Thổ Nhĩ Kỳ (5746e3), b/68159494

  • Thay thế ConcurrentHashMap bên trong RoomDatabase bằng Collections.synchronizedMap() để tránh các vấn đề trên Android Lollipop (d1cfc7, b/162431855)

  • Thêm lệnh gọi lại onOpenPrepackagedDatabase khi một DB được đóng gói trước được sao chép. (I1ba74, b/148934423)

Phiên bản 2.3.0-alpha02

Ngày 22 tháng 7 năm 2020

Phát hành androidx.room:room-*:2.3.0-alpha02. Phiên bản 2.3.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Hỗ trợ RxJava3: Room nay hỗ trợ các loại RxJava3. Tương tự như RxJava2, bạn có thể khai báo các phương thức DAO có loại trả về là Flowable, Single, Maybe và Completable. Ngoài ra, còn có một cấu phần phần mềm mới androidx.room:room-rxjava3 hỗ trợ RxJava3. (b/152427884)

Thay đổi về API

  • Việc khai báo @TypeConverter trong lớp Đối tượng Kotlin nay được hỗ trợ. (b/151110764)
  • Tuỳ chọn xử lý chú thích gia tăng của Room hiện là ON (BẬT) theo mặc định. (b/112110217)

Phiên bản 2.3.0-alpha01

Ngày 10 tháng 6 năm 2020

Phát hành androidx.room:room-*:2.3.0-alpha01. Phiên bản 2.3.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • Hỗ trợ Paging 3.0: Nay Room sẽ hỗ trợ việc triển khai cho các phương thức chú thích @Query có loại trả về là androidx.paging.PagingSource.

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

Thay đổi về API

  • @RewriteQueriesToDropUnusedColumns là một chú thích tiện lợi mới giúp Room ghi lại phép chiếu "*" trong truy vấn để xoá các cột không được sử dụng trong kết quả.
  • Tuỳ chọn bộ xử lý room.expandProjection hiện không còn được sử dụng. Sử dụng @RewriteQueriesToDropUnusedColumns để thay thế cho những truy vấn tối ưu hoá Room bằng các phép chiếu sao. Lưu ý rằng @RewriteQueriesToDropUnusedColumns không thay thế giải pháp xung đột cột room.expandProjection liên quan đến các loại trả về có chứa các trường @Embedded.

Sửa lỗi

  • Khắc phục lỗi trong đó Room không phát hiện chính xác phiên bản JDK dùng để bật trình xử lý chú giải gia tăng. Nhờ có Blaz Solar (me@blaz.solar) (b/155215201)
  • Room hiện nhúng phần phụ thuộc ANTLR với bộ xử lý chú giải để tránh xung đột phiên bản với các bộ xử lý khác cũng sử dụng ANTLR. (b/150106190)

Phiên bản 2.2.6

Phiên bản 2.2.6

Ngày 16 tháng 12 năm 2020

Phát hành androidx.room:room-*:2.2.6. Phiên bản 2.2.6 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề Room sẽ vô hiệu hoá không chính xác quá trình xử lý chú giải gia tăng trong các phiên bản JDK mới hơn. (b/171387388)

Phiên bản 2.2.5

Phiên bản 2.2.5

Ngày 18 tháng 3 năm 2020

Phát hành androidx.room:room-*:2.2.5. Phiên bản 2.2.5 bao gồm các thay đổi sau.

Sửa lỗi

  • Tạo MultiInstanceInvalidationService directBootAware. Nhờ có "Mygod contact-git@mygod.be" (b/148240967)
  • Khắc phục lỗi gây ra sự cố khi bật tính năng vô hiệu hoá nhiều phiên bản và cơ sở dữ liệu chứa thực thể FTS. (b/148969394)
  • Khắc phục vấn đề khi việc tải thư viện gốc SQLite trong trình xử lý chú giải Room khiến trình biên dịch gặp sự cố do biên dịch song song. (b/146217083)

Phiên bản 2.2.4

Phiên bản 2.2.4

Ngày 19 tháng 2 năm 2020

Phát hành 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.4androidx.room:room-testing:2.2.4. Phiên bản 2.2.4 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục vấn đề về giao dịch tạm ngưng do tắc nghẽn nếu coroutine bị huỷ nhanh trước khi giao dịch thực sự bắt đầu. (b/148181325)
  • Khắc phục vấn đề @Generated bị dùng sai khi tạo bằng JDK 9. (b/146538330)
  • Khắc phục vấn đề Room sẽ tạo mã không chính xác khi giao diện DAO trong Kotlin có hàm concrete. (b/146825845)

Phiên bản 2.2.3

Phiên bản 2.2.3

Ngày 18 tháng 12 năm 2019

Phát hành androidx.room:room-*:2.2.3. Phiên bản 2.2.3 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi Room không xác thực được cơ sở dữ liệu chưa được di chuyển lần nào và chứa hàm băm cũ với các chỉ mục trong giản đồ. (b/139306173)

Phiên bản 2.2.2

Phiên bản 2.2.2

Ngày 20 tháng 11 năm 2019

androidx.room:room-*:2.2.2 được phát hành. Phiên bản 2.2.2 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi trong đó việc thu thập mối quan hệ một với một với hơn 999 hàng sẽ khiến Room trả về các mục liên quan rỗng. (b/143105450)

Phiên bản 2.2.1

Phiên bản 2.2.1

Ngày 23 tháng 10 năm 2019

Phát hành androidx.room:room-*:2.2.1. Phiên bản 2.2.1 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục một lỗi khiến Room cảnh báo không chính xác về CURSOR_MISMATCH khi tuỳ chọn trình biên dịchexpandProjection được bật. (b/140759491)
  • Thêm cơ chế thử lại để xử lý thư viện gốc bị thiếu mà cần dùng để xác minh truy vấn trong thời gian biên dịch

Phiên bản 2.2.0

Phiên bản 2.2.0

Ngày 9 tháng 10 năm 2019

Phát hành androidx.room:room-*:2.2.0. Phiên bản 2.2.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 2.1.0

  • Cơ sở dữ liệu đóng gói trước: Hiện bạn có thể dùng 2 API mới trong RoomDatabase.Builder để tạo RoomDatabase với một tệp cơ sở dữ liệu đã điền sẵn. createFromAsset() dành cho các tệp cơ sở dữ liệu đã điền sẵn nằm trong thư mục tài sản của tệp APK, còn createFromFile() dùng khi tệp này nằm ở một vị trí tuỳ ý. Việc sử dụng các API này sẽ làm thay đổi hành vi của quá trình di chuyển có xoá để trong quá trình di chuyển dự phòng, Room sẽ cố gắng sao chép lại cơ sở dữ liệu đã điền sẵn nếu có. Nếu không, Room sẽ chỉ dừng và tạo lại tất cả các bảng. b/62185732
  • Giá trị mặc định của giản đồ: @ColumnInfo hiện có một thuộc tính mới defaultValue có thể dùng để chỉ định giá trị mặc định của cột. Các giá trị mặc định là một phần của giản đồ cơ sở dữ liệu và sẽ được xác thực trong quá trình di chuyển nếu được chỉ định. b/64088772
  • Mối quan hệ nhiều với nhiều: @Relation hiện có một thuộc tính mới associateBy đưa vào chú thích mới @Junction, được dùng để khai báo mối quan hệ cần được đáp ứng thông qua bảng kết nối (còn được gọi là bảng tham gia). b/69201917
  • Mối quan hệ một với một: Hạn chế trong các trường POJO có chú giải @Relation là loại List hoặc Set đã được gỡ bỏ, cho phép các mối quan hệ một giá trị được thể hiện hiệu quả. b/62905145
  • Thực thể mục tiêu: Các chú thích DAO @Insert, @Update@Delete hiện có một thuộc tính mới targetEntity, cho phép chỉ định bảng mục tiêu để phương thức DAO hoạt động. Việc này cho phép tham số của các phương thức DAO đó trở thành các POJO tuỳ ý và được hiểu là các thực thể một phần. Trong thực tế, thao tác này cho phép chèn, xoá và cập nhật một phần.b/127549506
  • Coroutine Flow: Hiện tại, các phương thức DAO của @Query có thể thuộc loại trả về Flow<T>. Flow được trả về sẽ cho ra lại một tập hợp giá trị mới nếu các bảng quan sát trong truy vấn không hợp lệ. Khai báo hàm DAO với kiểu dữ liệu trả về Channel<T> là một lỗi. Thay vào đó, Room khuyến khích bạn sử dụng Flow rồi dùng các hàm lân cận để chuyển đổi Flow thành Channel. b/130428884
  • Trình xử lý chú giải gia tăng Gradle: Room hiện là trình xử lý chú giải dành riêng cho Gradle và bạn có thể bật tính năng gia tăng thông qua tuỳ chọn room.incremental của trình xử lý. Xem bài viết về Các tuỳ chọn Trình biên dịch Room để biết thêm thông tin. Nếu bạn gặp bất kỳ vấn đề nào, vui lòng báo cáo lỗi tại đây. Chúng tôi dự định bật tính năng tăng dần theo mặc định trong phiên bản ổn định trong tương lai. b/112110217
  • Mở rộng phép chiếu: Một tuỳ chọn trình biên dịch thử nghiệm mới room.expandProjection được thêm, khiến Room ghi lại truy vấn với một phép chiếu sao (star projection) để chỉ chứa các cột thuộc loại trả về POJO. Ví dụ: đối với phương thức DAO có @Query("SELECT * FROM Song") trả về một POJO có tên SongIdAndTitle với chỉ hai trường. Sau đó, Room sẽ ghi lại truy vấn thành SELECT id, title FROM Song sao cho tìm nạp được nhóm cột tối thiểu đáp ứng loại trả về. Điều này về cơ bản sẽ loại bỏ cảnh báo CURSOR_MISMATCH xuất hiện khi truy vấn trả về các cột thừa không khớp với bất kỳ trường nào trong loại POJO trả về.

Phiên bản 2.2.0-rc01

Ngày 5 tháng 9 năm 2019

Phát hành androidx.room:room:2.2.0-rc01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Không có thay đổi công khai nào kể từ Room 2.2.0-beta01.

Phiên bản 2.2.0-beta01

Ngày 22 tháng 8 năm 2019

Phát hành androidx.room:room-*:2.2.0-beta01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Khắc phục lỗi truy vấn Coroutine Flow sẽ ngừng thu thập các giá trị mới sau một thời gian nhất định. (b/139175786)
  • Khắc phục lỗi Room không chấp nhận mã băm của giản đồ cũ trong khi mở cơ sở dữ liệu chưa được di chuyển kể từ Room 1.0, gây ra sự cố thời gian chạy do giản đồ không hợp lệ. (b/139306173)

Phiên bản 2.2.0-alpha02

Ngày 7 tháng 8 năm 2019

Phát hành androidx.room:room-*:2.2.0-alpha02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Coroutine Flow: Hiện tại, các phương thức DAO của @Query có thể thuộc loại trả về Flow<T>. Flow được trả về sẽ cho ra lại một tập hợp giá trị mới nếu các bảng quan sát trong truy vấn không hợp lệ. Khai báo hàm DAO với kiểu dữ liệu trả về Channel<T> là một lỗi. Thay vào đó, Room khuyến khích bạn sử dụng Flow rồi dùng các hàm lân cận để chuyển đổi Flow thành Channel. b/130428884
  • Mở rộng phép chiếu: Một tuỳ chọn trình biên dịch thử nghiệm mới room.expandProjection được thêm, khiến Room ghi lại truy vấn với một phép chiếu sao (star projection) để chỉ chứa các cột thuộc loại trả về POJO. Ví dụ: đối với phương thức DAO có @Query("SELECT * FROM Song") trả về một POJO có tên SongIdAndTitle với chỉ hai trường. Sau đó, Room sẽ ghi lại truy vấn thành SELECT id, title FROM Song sao cho tìm nạp được nhóm cột tối thiểu đáp ứng loại trả về. Điều này về cơ bản sẽ loại bỏ cảnh báo CURSOR_MISMATCH xuất hiện khi truy vấn trả về các cột thừa không khớp với bất kỳ trường nào trong loại POJO trả về.
  • onDestructiveMigrate là một API gọi lại mới được thêm vào RoomDatabase.Callback khi Room di chuyển một cơ sở dữ liệu theo cách huỷ bỏ. b/79962330

Sửa lỗi

  • Khắc phục lỗi khi Room tạo mã không chính xác bằng cách dùng một phương thức làm phương thức đặt giá trị trường khi trường được bảo vệ. b/136194628
  • Khắc phục lỗi làm cho InvalidationTracker gửi một NPE vào quy trình thứ hai khi tính năng vô hiệu hoá nhiều phiên bản được bật và dịch vụ vô hiệu hoá bị huỷ. b/137454915
  • Khắc phục lỗi Room không xác định chính xác kiểu dữ liệu trả về của hàm tạm ngưng kế thừa được chú giải bằng @RawQuery. b/137878827
  • Cập nhật mã đã tạo cho @Relation khi khoá liên quan thuộc loại BLOB để sử dụng ByteBuffer có thể so sánh. b/137881998
  • Khắc phục lỗi khi Room sẽ khiếu nại về việc bị thiếu phương thức setter trên POJO được sử dụng làm tham số thực thể một phần của @Insert, @Update@Delete. b/138664463
  • Khắc phục lỗi Room sẽ khiếu nại về việc thiếu phương thức getter và setter cho một cột bị bỏ qua thông qua @Entity khi lớp thực thể được sử dụng trong một số phương thức DAO. b/138238182
  • Khắc phục một lỗi khi Room không chuyển đổi chính xác tham số liên kết sang tham số vị trí, gây ra lỗi ngoại lệ thời gian chạy khi thực thi truy vấn có tham số sử dụng lại. b/137254857

Phiên bản 2.2.0-alpha01

Ngày 10 tháng 7 năm 2019

Tính năng mới

  • Cơ sở dữ liệu đóng gói trước: Hiện bạn có thể dùng 2 API mới trong RoomDatabase.Builder để tạo RoomDatabase với một tệp cơ sở dữ liệu đã điền sẵn. createFromAsset() dành cho các tệp cơ sở dữ liệu đã điền sẵn nằm trong thư mục tài sản của tệp APK, còn createFromFile() dùng khi tệp này nằm ở một vị trí tuỳ ý. Việc sử dụng các API này sẽ làm thay đổi hành vi của quá trình di chuyển có xoá để trong quá trình di chuyển dự phòng, Room sẽ cố gắng sao chép lại cơ sở dữ liệu đã điền sẵn nếu có. Nếu không, Room sẽ chỉ dừng và tạo lại tất cả các bảng. b/62185732
  • Giá trị mặc định của giản đồ: @ColumnInfo hiện có một thuộc tính mới defaultValue có thể dùng để chỉ định giá trị mặc định của cột. Các giá trị mặc định là một phần của giản đồ cơ sở dữ liệu và sẽ được xác thực trong quá trình di chuyển nếu được chỉ định. b/64088772

    Lưu ý: Nếu giản đồ cơ sở dữ liệu của bạn đã có các giá trị mặc định, chẳng hạn như các giá trị được thêm qua ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z và bạn quyết định xác định các giá trị mặc định thông qua @ColumnInfo cho cùng một cột, thì bạn có thể cần phải cung cấp một lượt di chuyển để xác thực giá trị mặc định không được tính đến. Xem phần Di chuyển Room để biết thêm thông tin.

  • Mối quan hệ nhiều với nhiều: @Relation hiện có một thuộc tính mới associateBy đưa vào chú thích mới @Junction, được dùng để khai báo mối quan hệ cần được đáp ứng thông qua bảng kết nối (còn được gọi là bảng tham gia). b/69201917
  • Mối quan hệ một với một: Hạn chế trong các trường POJO có chú giải @Relation là loại List hoặc Set đã được gỡ bỏ, cho phép các mối quan hệ một giá trị được thể hiện hiệu quả. b/62905145
  • Thực thể mục tiêu: Các chú thích DAO @Insert, @Update@Delete hiện có một thuộc tính mới targetEntity, cho phép chỉ định bảng mục tiêu để phương thức DAO hoạt động. Việc này cho phép tham số của các phương thức DAO đó trở thành các POJO tuỳ ý và được hiểu là các thực thể một phần. Trong thực tế, thao tác này cho phép chèn, xoá và cập nhật một phần.b/127549506
  • Trình xử lý chú giải gia tăng Gradle: Room hiện là trình xử lý chú giải dành riêng cho Gradle và bạn có thể bật tính năng gia tăng thông qua tuỳ chọn room.incremental của trình xử lý. Xem bài viết về Các tuỳ chọn Trình biên dịch Room để biết thêm thông tin. Nếu bạn gặp bất kỳ vấn đề nào, vui lòng báo cáo lỗi tại đây. Chúng tôi dự định bật tính năng tăng dần theo mặc định trong phiên bản ổn định trong tương lai. b/112110217

Sửa lỗi

  • Room sẽ không còn truyền EmptySetResultException tới trình xử lý lỗi toàn cầu khi dòng Rx của truy vấn đã được xử lý trước khi truy vấn hoàn tất. b/130257475
  • Khắc phục lỗi Room cho thấy thông báo lỗi không chính xác khi hàm DAO tạm ngưng được chú thích bằng @RawQuery không có loại trả về. b/134303897
  • Room sẽ không còn tạo bộ chuyển đổi DAO với các kiểu dữ liệu thô nữa.b/135747255

Phiên bản 2.1.0

Phiên bản 2.1.0

Ngày 13 tháng 6 năm 2019

Room 2.1.0 được phát hành mà không có thay đổi nào từ 2.1.0-rc01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Thay đổi quan trọng kể từ phiên bản 2.0.0

  • FTS: Room hiện hỗ trợ các thực thể có bảng FTS3 hoặc FTS4 ánh xạ. Các lớp được chú thích bằng @Entity hiện có thể được chú thích thêm bằng @Fts3 hoặc @Fts4 để khai báo một lớp có bảng tìm kiếm dạng văn bản đầy đủ. Các tuỳ chọn FTS để tuỳ chỉnh thêm hiện có sẵn thông qua các phương thức chú thích.
  • Thành phần hiển thị (View): Room hiện hỗ trợ việc khai báo một lớp như là một truy vấn đã lưu, còn gọi là một thành phần hiển thị (view), bằng cách sử dụng chú thích @DatabaseView.
  • Coroutine: Hiện tại, các phương thức DAO có thể là các hàm tạm ngưng. Thêm room-ktx vào các phần phụ thuộc để tận dụng chức năng này. Cấu phần phần mềm ktx cũng cung cấp hàm tiện ích RoomDatabase.withTransaction để thực hiện các giao dịch cơ sở dữ liệu trong một coroutine.
  • Giá trị tự động: Room hiện hỗ trợ khai báo các lớp có chú giải AutoValue dưới dạng các thực thể và POJO. Giờ đây, bạn có thể khai báo các chú thích @PrimaryKey, @ColumnInfo, @Embedded@Relation trong Room theo phương thức trừu tượng của lớp có giá trị tự động được chú thích. Xin lưu ý rằng chú thích này cũng phải đi kèm với @CopyAnnotations để Room hiểu đúng các chú thích đó.
  • Hỗ trợ không đồng bộ bổ sung: Các phương thức DAO được chú thích bằng @Insert, @Delete hoặc @Update, cùng với @Query chứa INSERT, DELETE hoặc câu lệnh UPDATE, hiện hỗ trợ loại trả về Rx Completable, Single, Maybe, và loại trả về của Guava ListenableFuture, và chúng cũng đồng thời có thể thành các hàm tạm ngưng.
  • enableMultiInstanceInvalidation là một API mới trong RoomDatabase.Builder để bật tính năng vô hiệu hoá trên nhiều phiên bản của Cơ sở dữ liệu Room sử dụng cùng một tệp cơ sở dữ liệu.
  • fallbackToDestructiveMigrationOnDowngrade là một API mới trong RoomDatabase.Builder để tự động tạo lại cơ sở dữ liệu nếu quá trình hạ cấp diễn ra.
  • ignoredColumns là một API mới trong chú thích @Entity có thể dùng để liệt kê các trường bị bỏ qua theo tên.
  • Hiện Room có thể sử dụng đúng hàm khởi tạo chính của Kotlin trong các lớp dữ liệu, giúp bạn không cần phải khai báo những thuộc tính này là vars.

Phiên bản 2.1.0-rc01

Ngày 29 tháng 5 năm 2019

Sửa lỗi

  • Khắc phục lỗi khởi chạy Room có thể xảy ra do cấu hình temp_store được thiết lập sẵn. b/132602198
  • Khắc phục cảnh báo sử dụng dấu ngoặc kép cho người dùng có SQLite 3.27.0 trở lên. b/131712640
  • Khắc phục lỗi khi nhiều quá trình kiểm tra tính không hợp lệ diễn ra song song khiến InvalidationTracker gặp sự cố. b/133457594

Phiên bản 2.1.0-beta01

Ngày 7 tháng 5 năm 2019

androidx.room 2.1.0-beta01 được phát hành mà không có thay đổi nào từ phiên bản 2.1.0-alpha07. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Phiên bản 2.1.0-alpha07

Ngày 25 tháng 4 năm 2019

Thay đổi về API/Hành vi

  • Hàm tiện ích RoomDatabase.withTransaction đã được thay đổi để không còn nhận một khối hàm có CoroutineScope là đối tượng nhận nữa. Điều này giúp bỏ qua trình bao bọc coroutineScope { } bổ sung cần thiết để chạy mọi thứ trong khối giao dịch đồng thời.

Sửa lỗi

  • Khắc phục lỗi khi Room không khớp với một TypeConverter cho hàm Kotlin DAO chứa tham số của kiểu Tập hợp (Collection). b/122066791

Phiên bản 2.1.0-alpha06

Ngày 22 tháng 3 năm 2019

Thay đổi về API/Hành vi

  • Các truy vấn giao dịch không đồng bộ hiện sẽ được nối tiếp sao cho Room sẽ không sử dụng quá một chuỗi để thực hiện các giao dịch cơ sở dữ liệu. RoomDatabase.Builder.setTransactionExecutor(Executor) đã được thêm để cho phép cấu hình trình thực thi cho các giao dịch.
  • RoomDatabase.runInTransaction(Callable) sẽ không để các trường hợp ngoại lệ đã kiểm tra vào RuntimeExceptions. b/128623748

Sửa lỗi

  • Khắc phục lỗi khi trình theo dõi vô hiệu hoá sẽ ngừng quan sát bảng nội dung nếu bạn thêm trình quan sát cho cả bảng nội dung và bảng FTS nội dung bên ngoài b/128508917
  • Cập nhật ngữ pháp SQLite của Room để phù hợp với SQLite 3.24.0. b/110883668

Phiên bản 2.1.0-alpha05

Ngày 13 tháng 3 năm 2019

Tính năng mới

  • Hàm tiện ích RoomDatabase.withTransaction cho phép bạn thực hiện các giao dịch cơ sở dữ liệu một cách an toàn trong coroutine. Các hàm tiện ích của Room cùng với sự hỗ trợ của coroutine hiện có trong cấu phần phần mềm room-ktx.
  • Giờ đây phương thức DAO không trừu tượng có chú thích @Transaction có thể là các hàm tạm ngưng. b/120241587

Thay đổi về API/Hành vi

  • Cấu phần phần mềm room-coroutines này được đổi tên thành room-ktx theo cách đặt tên tương tự như các cấu phần phần mềm AndroidX khác.
  • beginTransaction, setTransactionSuccessfulendTransaction trong RoomDatabase đã ngừng hoạt động vì runInTransactionroom-ktx tiện ích withTransaction.

Sửa lỗi

  • Khắc phục lỗi đối số của trình tạo mã thông báo bị loại bỏ nếu trình tạo mã thông báo được sử dụng là SIMPLE. b/125427014
  • Khắc phục lỗi Room không xác định chính xác các hàm tạm ngưng với các tham số thuộc loại nội bộ. b/123767877
  • Khắc phục lỗi phương thức DAO @Query bị hoãn với các câu lệnh INSERT, UPDATE hoặc DELETE đang chuẩn bị truy vấn trong luồng chính. b/123695593
  • Khắc phục nhiều lỗi khi Room sẽ tạo mã không chính xác cho các hàm tạm ngưng nhất định. b/123466702b/123457323
  • Khắc phục lỗi trong đó việc sử dụng các phương thức không dùng nữa không được chặn đúng cách trong mã đã tạo. b/117602586
  • Cập nhật phần phụ thuộc Room của androidx.sqlite lên 1.0.2 có chứa các bản sửa lỗi để xử lý chính xác các cơ sở dữ liệu bị hỏng. b/124476912

Lỗi đã biết

  • Room 2.1.0-alpha05 phụ thuộc vào cấu phần phần mềm kotlinx-metadata-jvm hiện không có trong Maven Central (KT-27991). Bạn có thể giải quyết phần phụ thuộc này bằng cách thêm maven { url "https://kotlin.bintray.com/kotlinx/" } vào kho lưu trữ của dự án.

Phiên bản 2.1.0-alpha04

Ngày 25 tháng 1 năm 2019

Tính năng mới

  • Các phương thức DAO được chú thích bằng @Query có chứa các câu lệnh INSERT, UPDATE hoặc DELETE hiện có thể trả về các loại không đồng bộ Single, Mayble, CompletableListenableFuture. Ngoài ra, chúng cũng có thể là các hàm tạm ngưng. b/120227284

Thay đổi về API/Hành vi

  • Hiện Room sẽ gửi một lỗi nếu phương thức DAO không trừu tượng có chú giải bằng @Transaction trả về một loại không đồng bộ, chẳng hạn như Single, Mayble, Completable, LiveData hoặc ListenableFuture. Vì các giao dịch bị hạn chế, nên Room hiện không thể bắt đầu và kết thúc một giao dịch xung quanh một hàm có thể thực hiện nhiều truy vấn trong các chuỗi khác nhau. b/120109336
  • OnConflictStrategy.FAILOnConflictStrategy.ROLLBACK đã bị @Deprecated do chúng không hoạt động như dự kiến với các đường liên kết SQLite hiện tại của Android. b/117266738

Sửa lỗi

  • Khắc phục lỗi khi Room không sử dụng đúng TypeConverter của một kiểu dữ liệu trả về nếu phương thức DAO là một hàm tạm ngưng. b/122988159
  • Khắc phục lỗi khi Room xác định nhầm các hàm tạm ngưng kế thừa là hàm không tạm ngưng. b/122902595
  • Khắc phục lỗi trong đó Room tạo mã không chính xác khi trường @Embedded nằm trong lớp cha và được dùng trong nhiều lớp con. b/121099048
  • Khắc phục vấn đề trong đó cơ sở dữ liệu bị gián đoạn khi gọi các hàm tạm ngưng DAO giữa beginTransaction()endTransaction(). b/120854786

Phiên bản 2.1.0-alpha03

Ngày 4 tháng 12 năm 2018

Thay đổi về API

  • FTS tokenizer trong @Fts3/@Fts4 hiện lấy một String thay vì một Enum. Việc này cho phép Room sử dụng các trình tạo mã thông báo tuỳ chỉnh. Các trình tạo mã thông báo được tích hợp sẵn vẫn được định nghĩa trong FtsOptions dưới dạng hằng số chuỗi. b/119234881

Tính năng mới

  • Coroutine: Hiện tại, các phương thức DAO có thể là các hàm tạm ngưng. Để hỗ trợ việc tạm ngưng các chức năng trong Room, một cấu phần phần mềm mới đã được phát hành (room-coroutines). b/69474692
  • Các phương thức DAO chú giải bằng @Insert, @Delete hoặc @Update hiện hỗ trợ ListenableFuture dưới dạng kiểu dữ liệu trả về. b/119418331

Sửa lỗi

  • Khắc phục lỗi khi Room cố gắng tìm sai hàm khởi tạo có cột trong thuộc tính ignoredColumns của @Entity. b/119830714
  • Khắc phục lỗi khiến Room không đánh dấu các tham số phương thức DAO là cuối cùng trong quá trình triển khai. b/118015483
  • Khắc phục lỗi khiến trình xử lý của Room gặp sự cố khi báo cáo lỗi về một truy vấn có các ký hiệu đặc biệt. b/119520136
  • Khắc phục lỗi khi Room từ chối nhiều cách triển khai Collection khác làm đối số của biểu thức IN. b/119884035
  • Khắc phục lỗi khiến LiveData được trả về từ Room sẽ thu thập rác khi quan sát vĩnh viễn khiến cho dữ liệu đó không còn phát ra dữ liệu mới nữa. b/74477406
  • Cập nhật khoá đóng của RoomDatabase để giảm dung lượng khoá. b/117900450

Phiên bản 2.1.0-alpha02

Ngày 30 tháng 10 năm 2018

Tính năng mới

  • Thêm chức năng hỗ trợ để tham chiếu @DatabaseView trong @Relation. b/117680932

Sửa lỗi

  • Khắc phục lỗi khiến Room thực hiện I/O ổ đĩa trong luồng chính khi đăng ký và loại bỏ khỏi một kiểu dữ liệu trả về Rx. b/117201279
  • Khắc phục lỗi khi Room không tìm thấy trình chuyển đổi kiểu dữ liệu phù hợp cho một trường trong lớp thực thể Kotlin. b/111404868
  • Khắc phục lỗi khi Room tạo mã không chính xác cho việc triển khai giao diện DAO chứa phương thức mặc định Kotlin không có đối số. b/117527454
  • Cập nhật trình phân tích cú pháp ngữ pháp SQLite của Room, khắc phục vấn đề về hiệu suất khiến thời gian xây dựng kéo dài. b/117401230

Phiên bản 2.1.0-alpha01

Ngày 8 tháng 10 năm 2018

Tính năng mới

  • FTS: Room hiện hỗ trợ các thực thể có bảng FTS3 hoặc FTS4 liên kết. Các lớp được chú thích bằng @Entity nay có thể được chú thích thêm bằng @Fts3 hoặc @Fts4 để khai báo lớp có bảng tìm kiếm dạng văn bản đầy đủ. Các tuỳ chọn FTS để tuỳ chỉnh thêm hiện có sẵn thông qua các phương thức của chú giải. b/62356416
  • Khung hiển thị (View): Room hiện hỗ trợ việc khai báo một lớp như là một truy vấn đã lưu, còn gọi là khung hiển thị, bằng cách sử dụng chú giải @DatabaseView. b/67033276
  • Giá trị tự động: Room hiện hỗ trợ khai báo các lớp có chú giải AutoValue dưới dạng thực thể và POJO. Giờ đây, bạn có thể khai báo các chú thích @PrimaryKey, @ColumnInfo, @Embedded@Relation trong Room theo phương thức trừu tượng của lớp có giá trị tự động được chú thích. Lưu ý rằng chú giải này cũng phải đi kèm với @CopyAnnotations cho Room để hiểu đúng các chú giải. b/62408420
  • Hỗ trợ loại dữ liệu trả về Rx bổ sung: Phương thức DAO được chú thích bằng @Insert, @Delete hoặc @Update nay hỗ trợ cả các loại dữ liệu trả về Rx Completable, Single<T>Maybe<T>. b/63317956
  • Các loại không thể thay đổi với @Relation: Trước đây Room yêu cầu các trường chú thích @Relation bắt buộc phải có thể đặt được, nhưng giờ đây chúng có thể là các tham số của hàm khởi tạo.
  • enableMultiInstanceInvalidation: Là một API mới trong RoomDatabase.Builder để cho phép vô hiệu hoá nhiều thực thể của RoomDatabase bằng cách sử dụng cùng một tệp cơ sở dữ liệu. Cơ chế vô hiệu hoá nhiều phiên bản này cũng hoạt động trên nhiều quy trình. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: Là một API mới trong RoomDatabase.Builder để tự động tạo lại cơ sở dữ liệu nếu quá trình hạ cấp diễn ra. b/110416954
  • ignoredColumns: Là một API mới trong chú thích @Entity có thể dùng để liệt kê các trường bị bỏ qua theo tên. Hữu ích khi bỏ qua các trường kế thừa trên một thực thể. b/63522075

Thay đổi về API/Hành vi

  • mCallbackmDatabase trong RoomDatabase nay là @Deprecated và sẽ bị xoá trong phiên bản mới của Room. b/76109329

Sửa lỗi

  • Khắc phục 2 vấn đề khi Room không khôi phục đúng cách từ một cơ sở dữ liệu bị hỏng hoặc quá trình di chuyển không hợp lệ trong khi khởi động. b/111504749b/111519144
  • Hiện Room sẽ sử dụng đúng hàm khởi tạo chính của Kotlin trong các lớp dữ liệu, giúp bạn không cần phải khai báo các trường dưới dạng vars. b/105769985

Phiên bản 2.0.0

Phiên bản 2.0.0

Ngày 1 tháng 10 năm 2018

Phát hành androidx.room 2.0.0 phát hành mà không có thay đổi nào từ phiên bản 2.0.0-rc01.

Phiên bản 2.0.0-rc01

Ngày 20 tháng 9 năm 2018

Phát hành androidx.room 2.0.0-rc01 mà không có thay đổi nào từ phiên bản thử nghiệm 2.0.0-beta01.

Phiên bản 2.0.0-beta01

Ngày 2 tháng 7 năm 2018

Thay đổi về API/Hành vi

  • Thêm RoomDatabase.Builder.setQueryExecutor() để cho phép tuỳ chỉnh vị trí chạy truy vấn
  • Bổ sung tính năng hỗ trợ RxJava2 Observable
  • Các quá trình triển khai DAO và Database đã tạo hiện đã hoàn tất

Sửa lỗi

  • Chỉ định tên lớp/trường trong lỗi "không tìm thấy phương thức getter cho trường" b/73334503
  • Sửa khả năng tương thích ngược của RoomOpenHelper với các phiên bản cũ của Room b/110197391

Phần phụ thuộc Pre-AndroidX

Đối với các phiên bản pre-AndroidX của Room, hãy thêm các phần phụ thuộc sau:

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"
}

Phiên bản 1.1.1

Phiên bản 1.1.1

Ngày 19 tháng 6 năm 2018

Room 1.1.1 giống với Room 1.1.1-rc1.

Phiên bản 1.1.1-rc1

Ngày 16 tháng 5 năm 2018. Bạn nên sử dụng Room 1.1.1-rc1 thay vì 1.1.0 nếu bạn thực hiện quá trình di chuyển.

Khắc phục lỗi khi Room không xử lý đúng cách quy trình khởi động sau khi di chuyển b/79362399

Phiên bản 1.1.0

Phiên bản 1.1.0-beta3

Ngày 19 tháng 4 năm 2018

Sửa lỗi

  • Khắc phục lỗi biên dịch khi một Kotlin POJO tham chiếu đến một thực thể liên quan đã được xác định trong Java b/78199923

Phiên bản 1.1.0-beta2

Ngày 5 tháng 4 năm 2018

Sửa lỗi

  • Khắc phục một lỗi nghiêm trọng trong các hoạt động triển khai Rx SingleMaybe của Room, trong đó việc này sẽ lặp lại truy vấn trước, gây ra sự cố nếu bạn thêm nhiều hơn 1 vật quan sát cho các phiên bản được trả về Single hoặc Maybe. b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] sẽ không VACUUM cơ sở dữ liệu nếu cơ sở dữ liệu được gọi từ nội tại một giao dịch. b/77235565

Phiên bản 1.1.0-beta1

Ngày 21 tháng 3 năm 2018

Thay đổi về API

  • Dựa trên ý kiến phản hồi về đánh giá API, @RawQuery không chấp nhận việc truyền String dưới dạng tham số truy vấn nữa. Bạn cần sử dụng [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (xem [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] để dễ sàng tạo một phiên bản của [SupportSQLiteQuery][ref-SupportSQLiteQuery] với đối số support).
  • Giờ đây phương thức RoomDatabase.Builder's [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] chấp nhận vararg int thay cho vararg Integer.

Sửa lỗi

  • [RoomData.clearAllTables][ref-clearAllTables] nay cố gắng trả về không gian cho hệ điều hành bằng cách thiết lập một điểm kiểm tra WAL và VACUUM cơ sở dữ liệu.
  • [@RawQuery][ref-RawQuery] nay chấp nhận mọi Pojo cho thuộc tính observedEntities, miễn là Pojo tham chiếu đến một hoặc nhiều thực thể qua các trường Embedded hoặc Relation. b/74041772
  • Paging: Việc triển khai DataSource của Room hiện đã xử lý chính xác các phần phụ thuộc nhiều bảng (chẳng hạn như quan hệ và liên kết). Trước đây, những kết quả này sẽ không kích hoạt được kết quả mới hoặc không biên dịch được. b/74128314

Phiên bản 1.1.0-alpha1

Ngày 22 tháng 1 năm 2018

Tính năng mới

  • RawQuery: API mới này cho phép các phương thức @Dao nhận SQL dưới dạng tham số truy vấn b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: API mới này trong RoomDatabase.Builder cho phép kiểm soát chi tiết hơn từ việc bắt đầu di chuyển có xoá các phiên bản giản đồ (so với fallbackToDestructiveMigration)b/64989640
  • Room hiện chỉ hỗ trợ Paging API (API Phân trang) mới hơn (alpha-4+), loại bỏ tính năng hỗ trợ phiên bản LivePagedListProvider không dùng nữa. Để sử dụng phiên bản Room alpha mới, bạn cần sử dụng paging alpha-4 trở lên và chuyển từ LivePagedListProvider sang LivePagedListBuilder nếu bạn chưa thực hiện.

Sửa lỗi

  • Tăng cường hỗ trợ cho các loại Kotlin Kapt. b/69164099
  • Thứ tự của các trường không vô hiệu hoá giản đồ nữa. b/64290754