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 12 năm 2024 2.6.1 - - 2.7.0-alpha12

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 của mình:

Kotlin

dependencies {
    val room_version = "2.6.1"

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

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See Add the KSP plugin to your project
    ksp("androidx.room:room-compiler:$room_version")

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("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")
}

Groovy

dependencies {
    def room_version = "2.6.1"

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

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See KSP Quickstart to add KSP to your build
    ksp "androidx.room:room-compiler:$room_version"

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    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:$room_version"
}

Để biết thông tin về cách sử dụng trình bổ trợ KAPT, hãy xem tài liệu về KAPT.

Để biết thông tin về cách sử dụng trình bổ trợ KSP, hãy xem tài liệu bắt đầu nhanh về KSP.

Để 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 directory
Bật tính năng xuất giản đồ cơ sở dữ liệu vào tệp JSON trong thư mục đã cho. Hãy xem phần Di chuyển Room để biết thêm thông tin.
room.incremental boolean
Bật trình xử lý chú giải gia tăng cho Gradle. Giá trị mặc định là true.
room.generateKotlin boolean
Tạo tệp nguồn Kotlin thay vì Java. Yêu cầu KSP. Giá trị mặc định là false. Hãy xem ghi chú phiên bản 2.6.0 để biết thêm thông tin chi tiết.

Sử dụng trình bổ trợ Room cho Gradle

Với Room phiên bản 2.6.0 trở lên, bạn có thể sử dụng Trình bổ trợ Room cho Gradle để định cấu hình các tuỳ chọn cho trình biên dịch Room. Trình bổ trợ định cấu hình dự án sao cho các giản đồ được tạo (là kết quả của các tác vụ biên dịch và được sử dụng cho quá trình di chuyển tự động) được định cấu hình chính xác để có các bản dựng có thể tái tạo và lưu vào bộ nhớ đệm.

Để thêm trình bổ trợ, trong tệp bản dựng Gradle cấp cao nhất, hãy xác định trình bổ trợ và phiên bản của trình bổ trợ.

Groovy

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

Trong tệp bản dựng Gradle cấp mô-đun, hãy áp dụng trình bổ trợ và sử dụng tiện ích room.

Groovy

plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Kotlin

plugins {
    id("androidx.room")
}

android {
    ...
    room {
        schemaDirectory("$projectDir/schemas")
    }
}

Bạn phải đặt schemaDirectory khi sử dụng Trình bổ trợ Room cho Gradle. Thao tác này sẽ định cấu hình trình biên dịch Room và nhiều tác vụ biên dịch cũng như phần phụ trợ của trình biên dịch (javac, KAPT, KSP) để xuất các tệp giản đồ vào các thư mục có phiên bản, ví dụ: schemas/flavorOneDebug/com.package.MyDatabase/1.json. Bạn nên kiểm tra các tệp này vào kho lưu trữ để dùng cho việc xác thực và tự động di chuyển.

Bạn không thể định cấu hình một số tuỳ chọn trong tất cả phiên bản Trình bổ trợ Room cho Gradle, mặc dù trình biên dịch Room có hỗ trợ các tuỳ chọn đó. Bảng dưới đây liệt kê từng tuỳ chọn và cho biết phiên bản Trình bổ trợ Room cho Gradle đã thêm tính năng hỗ trợ định cấu hình tuỳ chọn đó bằng tiện ích room. Nếu phiên bản của bạn thấp hơn hoặc nếu tuỳ chọn này chưa được hỗ trợ, bạn có thể sử dụng các tuỳ chọn trình xử lý chú thích.

Lựa chọn Kể từ phiên bản
room.schemaLocation (bắt buộc) 2.6.0
room.incremental -
room.generateKotlin -

Sử dụng các tuỳ chọn trình xử lý chú giải

Nếu không sử dụng Trình bổ trợ Room cho Gradle hoặc nếu phiên bản trình bổ trợ của bạn không hỗ trợ tuỳ chọn bạn muốn, bạn có thể định cấu hình Room bằng các tuỳ chọn trình xử lý chú thích, như mô tả trong phần Thêm phần phụ thuộc bản dựng. Cách bạn chỉ định các tuỳ chọn chú giải phụ thuộc vào việc bạn sử dụng KSP hay KAPT cho Room.

Groovy

// For KSP
ksp {
    arg("option_name", "option_value")
    // other otions...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += [
                    "option_name":"option_value",
                    // other options...
                    ]
            }
        }
    }
}

Kotlin

// For KSP
ksp {
    arg("option_name", "option_value")
    // other options...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "option_name" to "option_value",
                    // other options...
                )
            }
        }
    }
}

room.schemaLocation là một thư mục chứ không phải loại gốc, nên bạn cần sử dụng CommandLineArgumentsProvider khi thêm tuỳ chọn này để Gradle biết về thư mục này khi tiến hành kiểm tra mới nhất. Di chuyển cơ sở dữ liệu Room cho thấy cách triển khai đầy đủ CommandLineArgumentsProvider cung cấp vị trí giả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.7

Phiên bản 2.7.0-alpha12

Ngày 11 tháng 12 năm 2024

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

Thay đổi về API

  • Thêm API thử nghiệm RoomDatabase.Builder.setInMemoryTrackingMode() để định cấu hình xem Room có sử dụng bảng trong bộ nhớ hay không để theo dõi việc vô hiệu hoá. (I2a9b2, b/185414040)

Sửa lỗi – Giờ đây, các hoạt động di chuyển huỷ bỏ sẽ thả các thành phần hiển thị để đảm bảo chúng được tạo lại, điều chỉnh hành vi khi allowDestructiveMigrationForAllTables BẬT (mặc định của KMP) với hành vi hiện có khi allowDestructiveMigrationForAllTables TẮT. (0a3e83, b/381518941)

Phiên bản 2.7.0-alpha11

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

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

Thay đổi về API

  • Xem lại chữ ký phương thức convertRows() mới thêm để trở thành một hàm tạm ngưng nhận RawRoomQuery cho việc phân trang phòng. (Ie57b5, b/369136627)

Sửa lỗi

  • Khắc phục vấn đề trong room-paging, trong đó mã không hợp lệ đang được tạo khi sử dụng @Relation kết hợp với PagingSource.

Phiên bản 2.7.0-alpha10

Ngày 16 tháng 10 năm 2024

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

Thay đổi về API

  • Tạo lớp ByteArrayWrapper nội bộ để hỗ trợ các Mối quan hệ với ByteBuffer trong các nền tảng không phải Android và không phải JVM. (I75543, b/367205685)
  • Thêm SQLiteStatement.getColumnType() cùng với nhiều hằng kết quả SQLITE_DATA_* để cho phép truy xuất loại dữ liệu của một cột. (I1985c, b/369636251)

Phiên bản 2.7.0-alpha09

Ngày 2 tháng 10 năm 2024

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

Sửa lỗi

  • Khắc phục vấn đề về việc triển khai KMP của room-paging sẽ gây ra Error code: 8, message: attempt to write a readonly database do bắt đầu một giao dịch ghi trên kết nối đọc. (b/368380988)

Phiên bản 2.7.0-alpha08

Ngày 18 tháng 9 năm 2024

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

Tính năng mới

  • Các cấu phần phần mềm room-paging đã được di chuyển để tương thích với KMP. (Ib8756, b/339934824)
  • API invalidationTrackerFlow() đã được phổ biến dưới dạng API của bên thứ nhất là InvalidationTracker.createFlow() và hiện có sẵn cho các nhóm tài nguyên không phải Android trong dự án KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)

Thay đổi về API

  • Tất cả cảnh báo và thông báo lỗi trong Room sử dụng từ Cursor đã bị xoá hoặc thay thế, vì Cursor không còn là thuật ngữ chung chính xác để sử dụng trong phiên bản KMP của Room. (Id8cd9, b/334087492)

Sửa lỗi

  • Khắc phục vấn đề Room KMP sẽ cố gắng phát mã bằng UUID cho các nền tảng không phải JVM. (b/362994709)
  • Khắc phục vấn đề với Trình bổ trợ Room Gradle gây ra lỗi như "Không thể thay đổi thuộc tính của cấu hình ... sau khi cấu hình đó đã bị khoá để đột biến" khi được sử dụng trong dự án KMP có Compose Multiplatform. (b/343408758)

Phiên bản 2.7.0-alpha07

Ngày 21 tháng 8 năm 2024

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

Tính năng mới

  • Giờ đây, Trình bổ trợ Room cho Gradle sẽ tự động thêm các giản đồ đã xuất vào nguồn tài nguyên Kiểm thử đo lường Android để MigrationTestHelper có thể sử dụng các giản đồ đó.

Sửa lỗi

  • Khắc phục vấn đề về "thực tế" được tạo của RoomDatabaseConstructor bị thiếu đối tượng sửa đổi "thực tế" trong hàm initialize nếu hàm đó cũng bị ghi đè trong phần khai báo "dự kiến". (359631627)
  • Khắc phục vấn đề "thực tế" được tạo của RoomDatabaseConstructor không khớp với chế độ hiển thị của phần khai báo "expect". (358138953)

Phiên bản 2.7.0-alpha06

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

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

Thay đổi về API

  • Thay đổi chế độ thiết lập bản sao cho RoomDatabase trong dự án KMP.

Do mô hình biên dịch Kotlin 2.0, chiến lược tham chiếu hàm sắp tạo có tên instantiateImpl() không còn khả thi nữa. Ra mắt hai API mới là @ConstructedByRoomDatabaseConstructor để thay thế chiến lược instantiateImpl(). Chiến lược mới như sau:

  1. Xác định một đối tượng dự kiến triển khai RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. Liên kết đối tượng với phần khai báo @Database bằng @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. Tạo một thực thể cơ sở dữ liệu mới nhưng không truyền đối số nhà máy

      fun createNewDatabase(path: String) =
        Room.databaseBuilder<AppDatabase>(name = path)
          .setDriver(BundledSQLiteDriver())
          .setQueryCoroutineContext(Dispatchers.IO)
          .build()
    

Sửa lỗi b/316978491, b/338446862b/342905180

  • Hỗ trợ @RawQuery trong Room KMP bằng cách thêm một API mới có tên là RoomRawQuery tương tự như SupportSQLiteQuery về việc giữ chuỗi SQL thô và một hàm để liên kết các đối số vào một câu lệnh. Các hàm được chú thích @RawQuery hiện có thể chấp nhận RoomRawQuery làm tham số duy nhất. (Iea844, b/330586815)
  • Thêm một phương thức nạp chồng của setQueryCallback() chấp nhận CoroutineContext. (Id66ff, b/309996304)
  • Thêm tính năng hỗ trợ cho các mục tiêu Kotlin Multiplatform linuxArm64 (I139d3, b/338268719)

Sửa lỗi

  • Khắc phục vấn đề Room tạo lệnh gọi đến recursiveFetchArrayMap không chính xác trong các mục tiêu không phải Android. (710c36, b/352482325)
  • Khắc phục vấn đề đôi khi Room sẽ gửi một ngoại lệ về "Đã hết thời gian chờ kết nối" trong dự án KMP. (fa72d0, b/347737870)
  • Khắc phục vấn đề trong quá trình di chuyển tự động sẽ kiểm tra khoá ngoại quá sớm trước khi các bảng khác thay đổi giản đồ để tuân thủ khoá ngoại mới. (7672c0, b/352085724)

Phiên bản 2.7.0-alpha05

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

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

Thay đổi về API

  • Đổi tên SQLiteKt thành SQLiteBundledSQLiteKt thành BundledSQLite. (I8b501)

Sửa lỗi

  • Khắc phục lỗi RoomDatabase bị tắc nghẽn hoặc gặp lỗi hết thời gian chờ kết nối khi sử dụng AndroidSQLiteDriver.

Phiên bản 2.7.0-alpha04

Ngày 12 tháng 6 năm 2024

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

Sửa lỗi

  • Khắc phục vấn đề trong trình xử lý chú giải của Room sẽ tạo mã KMP không tương thích khi một loại trả về nhiều bản đồ được xác định trong DAO. (b/340983093)
  • Khắc phục vấn đề Room không tìm thấy cách triển khai cơ sở dữ liệu đã tạo nếu lớp được chú thích @Database không có gói. (b/342097292)
  • Khắc phục vấn đề đôi khi việc bật tính năng tự động đóng và vô hiệu hoá nhiều phiên bản sẽ gây ra ConcurrentModificationException khi cơ sở dữ liệu tự động đóng do ở trạng thái rảnh.

Phiên bản 2.7.0-alpha03

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

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

Sửa lỗi

  • Khắc phục nhiều vấn đề liên quan đến Kotlin 2.0 và KSP 2.0. Xin lưu ý rằng Kotlin 2.0 với tính năng hỗ trợ KSP 2 chưa hoàn chỉnh và nhóm đang làm việc trên nhiều API và thay đổi về hành vi trong trình biên dịch mới. (b/314151707)

Phiên bản 2.7.0-alpha02

Ngày 14 tháng 5 năm 2024

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

Sửa lỗi

  • Khắc phục nhiều vấn đề về KSP.

Phiên bản 2.7.0-alpha01

Ngày 1 tháng 5 năm 2024

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

Tính năng mới

  • Hỗ trợ Kotlin Multiplatform (KMP): Trong bản phát hành này, Room đã được tái cấu trúc để trở thành thư viện Kotlin Multiplatform (KMP). Mặc dù vẫn còn một số việc cần làm, nhưng bản phát hành này giới thiệu một phiên bản Room mới, trong đó phần lớn chức năng đã được "thường hoá" (được tạo để hoạt động trên nhiều nền tảng). Các nền tảng hiện được hỗ trợ là Android, iOS, JVM (Máy tính), Mac gốc và Linux gốc. Mọi chức năng bị thiếu trong các nền tảng mới được hỗ trợ sẽ được cung cấp "tính năng đầy đủ" trong các bản phát hành Room sắp tới.

Để biết thêm thông tin về cách bắt đầu sử dụng Room KMP, vui lòng tham khảo tài liệu chính thức về Room KMP.

  • Tạo mã Kotlin trên KSP được BẬT theo mặc định nếu quá trình xử lý được thực hiện thông qua KSP. Đối với các dự án chỉ dùng KAPT hoặc Java, Room vẫn sẽ tạo nguồn Java.

Thay đổi về API

  • Chúng tôi đã thêm một phương thức nạp chồng của Room.databaseBuilder(). Phương thức này sẽ lấy một tham số lambda dùng để sử dụng với một hàm do Room tạo để tránh sử dụng tính năng phản chiếu khi tạo bản sao của quá trình triển khai RoomDatabase đã tạo. Ví dụ về cách sử dụng:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • Thêm API để định cấu hình Room bằng CoroutineContext vào trình tạo: RoomDatabase.Builder.setQueryCoroutineContext. Xin lưu ý rằng bạn chỉ có thể định cấu hình RoomDatabase bằng trình thực thi sử dụng setQueryExecutor hoặc bằng ngữ cảnh Coroutine, chứ không thể sử dụng cả hai.
  • Thêm API để định cấu hình Room bằng Trình điều khiển SQLite: RoomDatabase.Builder.setDriver(). Để biết thêm thông tin về API Trình điều khiển SQLite, hãy tham khảo tài liệu về KMP SQLite
  • Thêm các API để truy cập vào SQLiteConnection cơ bản từ API trình điều khiển: RoomDatabase.useReaderConnectionRoomDatabase.useWriterConnection.
  • Các lệnh gọi lại liên quan đến Room hiện có một phiên bản nạp chồng nhận SQLiteConnection thay vì SupportSQLiteDatabase. Các giá trị này sẽ được ghi đè khi di chuyển sang dự án KMP. Để biết thêm thông tin về cách di chuyển cách sử dụng Room trong một ứng dụng Android sang mô-đun KMP phổ biến, hãy tham khảo hướng dẫn di chuyển. Các lệnh gọi lại là:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • Cấu phần phần mềm KTX androidx.room:room-ktx đã được hợp nhất vào androidx.room:room-runtime cùng với tất cả các API của cấu phần phần mềm này, hiện đang trống. Vui lòng xoá phần phụ thuộc đó khỏi danh sách phần phụ thuộc.

Phiên bản 2.6

Phiên bản 2.6.1

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

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

Sửa lỗi

  • Giải quyết vấn đề trong mã được tạo, trong đó giá trị mặc định cho cột Double trong EntityCursorConverter được đặt thành 0 thay vì 0.0. Chúng tôi cũng đã thêm một bản sửa lỗi tiềm năng cho một trường hợp hiếm gặp tương tự đối với các cột thuộc loại Float. (Id75f5, b/304584179)
  • Các ngoại lệ được gửi từ tải PagingSource hiện sẽ được truyền dưới dạng LoadStateUpdate của LoadResult.Error chứa Throwable. Bạn có thể quan sát trạng thái lỗi này thông qua PagingDataAdapter.loadStateFlow(Views) hoặc LazyPagingItems.loadState(Compose). Xin lưu ý rằng đây là một thay đổi về hành vi, trong đó các lỗi tải trước đây sẽ xuất hiện dưới dạng một Ngoại lệ do phương thức dao kích hoạt tải. (I93887, b/302708983)

Phiên bản 2.6.0

Ngày 18 tháng 10 năm 2023

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

Các thay đổi quan trọng kể từ phiên bản 2.5.0

  • Giờ đây, bạn có thể bật tuỳ chọn tạo mã Kotlin (hoặc "Kotlin CodeGen") trong Room KSP. (4297ec0). Để bật Kotlin CodeGen trong Room, hãy thêm tên tuỳ chọn room.generateKotlin vào các tuỳ chọn bộ xử lý cho KSP. Để biết thêm thông tin chi tiết về cách truyền tuỳ chọn trình xử lý cho KSP, hãy xem tài liệu về KSP.

Lưu ý: Khi sử dụng Kotlin CodeGen, bạn cần lưu ý rằng có thêm một số quy định hạn chế. Các thuộc tính trừu tượng dưới dạng phương thức getter DAO hoặc truy vấn DAO trong Kotlin CodeGen không được phép và thay vào đó, bạn nên viết lại dưới dạng hàm để tránh nhầm lẫn rằng giá trị thuộc tính không thể thay đổi và có kết quả được lưu cố định. Một hạn chế khác đã được thêm vào là các loại trả về tập hợp rỗng không còn được phép trong Room cho Kotlin CodeGen.

Cảnh báo: Bạn có thể thấy rằng các dự án của mình nghiêm ngặt hơn về tính chất rỗng khi sử dụng Kotlin CodeGen. Trong Kotlin CodeGen, tính chất rỗng của đối số kiểu rất quan trọng, trong khi ở Java, tính chất này thường bị bỏ qua. Ví dụ: giả sử bạn có loại dữ liệu trả về là "Flow<foo\>" và bảng đang trống. Trong Java CodeGen, điều này sẽ không gây ra vấn đề nào, nhưng trong Kotlin CodeGen, bạn sẽ gặp lỗi. Để tránh điều này, bạn cần sử dụng `Flow<foo?\>`, giả sử một giá trị rỗng được phát ra. </foo?\></foo\>

  • Cấu phần phần mềm mới cho Trình bổ trợ Room cho Gradle đã được thêm vào Room với mã nhận dạng androidx.room. Cấu phần phần mềm này giải quyết nhiều vấn đề hiện có trong Room liên quan đến việc có đầu vào và đầu ra của giản đồ thông qua các tuỳ chọn trình xử lý chú giải Gradle. Để biết thêm thông tin chi tiết, hãy tham khảo ghi chú phát hành Room Phiên bản 2.6.0-alpha02.
  • Các lớp giá trị trong Thực thể Room hiện được hỗ trợ cho KSP. (4194095)
  • Các loại dữ liệu trả về Bản đồ lồng nhau trong các hàm DAO hiện được hỗ trợ trong Room. (I13f48, 203008711)

Phiên bản 2.6.0-rc01

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

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

Phiên bản 2.6.0-beta01

Ngày 23 tháng 8 năm 2023

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

Sửa lỗi

  • Xử lý trường hợp ngoại lệ SQLite đặc biệt trong quá trình chèn lên khi ngoại lệ 2067 SQLITE_CONSTRAINT_UNIQUE được gửi trong quá trình chèn lên, thao tác chèn lên sẽ thực hiện một bản cập nhật. (If2849, b/243039555)

Phiên bản 2.6.0-alpha03

Ngày 9 tháng 8 năm 2023

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

Tính năng mới

  • Các loại dữ liệu trả về Bản đồ lồng nhau trong các hàm DAO hiện được hỗ trợ trong Room. (I13f48, 203008711)

Thay đổi về API

  • Tạo một chú thích kiểu mới có tên là @MapColumn để thay thế @MapInfo (hiện không dùng nữa). Đối với mỗi tên cột (keyColumnName, valueColumnName hoặc cả hai) được cung cấp trong chú giải @MapInfo, bạn sẽ cần khai báo chú giải @MapColumn chỉ bằng columnName và sử dụng chú giải trên đối số loại cụ thể đang được tham chiếu (khoá hoặc giá trị của Bản đồ) trong loại trả về của hàm DAO. Điều này là do chú thích @MapColumn được sử dụng trực tiếp trên đối số loại trong loại dữ liệu trả về của hàm DAO, thay vì trên chính hàm đó như @MapInfo. Để biết thêm thông tin, vui lòng tham khảo tài liệu về @MapColumn. (Ib0305, b/203008711)
  • Cập nhật các tệp API để chú thích việc tạm ngưng khả năng tương thích (I8e87a, b/287516207)
  • Các API trình bổ trợ Room cho Gradle đã được cập nhật để không phải lúc nào cũng yêu cầu cấu hình cho mỗi biến thể. Điều này có nghĩa là trình bổ trợ có thể chấp nhận một vị trí chung cho tất cả các biến thể mà không cần tạo nhiều thư mục, cho phép di chuyển mượt mà hơn nhưng cũng đủ linh hoạt để định cấu hình phiên bản hoặc giản đồ loại bản dựng theo cách thủ công mà vẫn giữ lại các lợi ích của trình bổ trợ (các bản dựng có thể tái tạo và lưu vào bộ nhớ đệm). (I09d6f, b/278266663)

Sửa lỗi

  • Khắc phục lỗ hổng tiềm ẩn về rò rỉ bộ nhớ trong QueryInterceptorStatement. (I193d1)
  • Khắc phục hành vi không chính xác trong hàm QueryInterceptorDatabase execSQL(). (Iefdc8)

Phiên bản 2.6.0-alpha02

Ngày 21 tháng 6 năm 2023

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

Trình bổ trợ Room cho Gradle

Bản phát hành mới này chứa một cấu phần phần mềm mới cho Trình bổ trợ Room cho Gradle có mã nhận dạng androidx.room. Cấu phần phần mềm này giải quyết nhiều vấn đề hiện có trong Room liên quan đến việc có đầu vào và đầu ra của giản đồ thông qua các tuỳ chọn trình xử lý chú giải Gradle. Trình bổ trợ Room cho Gradle định cấu hình dự án sao cho các giản đồ được tạo dùng cho quá trình di chuyển tự động và là đầu ra của các tác vụ biên dịch được định cấu hình chính xác để có các bản dựng có thể tái tạo và lưu vào bộ nhớ đệm. Trình bổ trợ cung cấp một DSL để định cấu hình vị trí giản đồ cơ sở:

room {
    schemaDirectory("$projectDir/schemas/")
}

Sau đó, trình bổ trợ sẽ định cấu hình trình biên dịch Room và nhiều tác vụ biên dịch cũng như phần phụ trợ (javac, KAPT, KSP) để xuất các tệp giản đồ vào các thư mục có phiên bản, tức là schemas/flavorOneDebug/com.package.MyDatabase/1.json. Như thường lệ, các tệp này được kiểm tra vào kho lưu trữ để dùng cho việc xác thực và di chuyển tự động. Khi chuyển sang sử dụng trình bổ trợ thay vì các tuỳ chọn trình xử lý chú giải, bạn phải sao chép các tệp giản đồ hiện có vào thư mục phiên bản đã tạo do trình bổ trợ tạo ra. Đây là một thao tác di chuyển một lần và bạn phải thực hiện theo cách thủ công. Tài liệu về giản đồ trong developers.android.com sẽ được cập nhật trong tương lai sau khi chúng tôi xử lý ý kiến phản hồi và trình bổ trợ đạt trạng thái ổn định. Vì vậy, vui lòng dùng thử.

Thay đổi về API

  • RoomDatabase.QueryCallback được xác định là một giao diện chức năng để cho phép sử dụng lượt chuyển đổi SAM. (Iab8ea, b/281008549)

Sửa lỗi

  • Giải quyết vấn đề phát sinh khi tạo bản sao cơ sở dữ liệu trong Robolectric sau khi di chuyển các nguồn Room từ Java sang Kotlin. (Ic053c, b/274924903)

Phiên bản 2.6.0-alpha01

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

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

Tính năng mới

  • Hỗ trợ các lớp giá trị trong Room cho KSP. Room hiện có thể hỗ trợ các lớp giá trị trong Thực thể. (4194095)
  • Giờ đây, bạn có thể bật tính năng tạo mã Kotlin(hoặc "Kotlin CodeGen") trong Room (4297ec0). Để bật Kotlin CodeGen trong Room, hãy thêm tên tuỳ chọn room.generateKotlin vào các tuỳ chọn bộ xử lý cho KSP. Để biết thêm thông tin chi tiết về cách truyền tuỳ chọn trình xử lý cho KSP, hãy xem tài liệu về KSP.

Lưu ý: Khi sử dụng Kotlin CodeGen, bạn cần lưu ý rằng có thêm một số quy định hạn chế. Các thuộc tính trừu tượng dưới dạng phương thức getter DAO hoặc truy vấn DAO trong Kotlin CodeGen không được phép và thay vào đó, bạn nên viết lại dưới dạng hàm để tránh nhầm lẫn rằng giá trị thuộc tính không thể thay đổi và có kết quả được lưu cố định. Một hạn chế khác đã được thêm vào là các loại trả về tập hợp rỗng không còn được phép trong Room cho Kotlin CodeGen.

Cảnh báo: Bạn có thể thấy rằng các dự án của mình nghiêm ngặt hơn về tính chất rỗng khi sử dụng Kotlin CodeGen. Trong Kotlin CodeGen, tính chất rỗng của đối số kiểu rất quan trọng, trong khi ở Java, tính chất này thường bị bỏ qua. Ví dụ: giả sử bạn có loại dữ liệu trả về là "Flow<foo\>" và bảng đang trống. Trong Java CodeGen, điều này sẽ không gây ra vấn đề nào, nhưng trong Kotlin CodeGen, bạn sẽ gặp lỗi. Để tránh điều này, bạn cần sử dụng `Flow<foo?\>`, giả sử một giá trị rỗng được phát ra. </foo?\></foo\>

Thay đổi về API

  • Ngăn chặn việc sử dụng các bộ sưu tập rỗng trong các loại dữ liệu trả về của phương thức DAO. (I777dc, b/253271782, b/259426907)
  • Thêm một API để tạo Flow phát ra các thay đổi của trình theo dõi vô hiệu. API này hữu ích cho việc tạo các luồng cần phản ứng với các thay đổi đối với cơ sở dữ liệu. (I8c790, b/252899305)

Sửa lỗi

  • Không cho phép các thuộc tính trừu tượng làm phương thức getter DAO hoặc truy vấn DAO trong codegen Kotlin, thay vào đó, bạn nên viết lại các thuộc tính này dưới dạng hàm để tránh nhầm lẫn rằng giá trị thuộc tính không thể thay đổi và có kết quả được lưu cố định. (If6a13, b/127483380, b/257967987)

Phiên bản 2.5.2

Phiên bản 2.5.2

Ngày 21 tháng 6 năm 2023

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

Sửa lỗi

  • Khắc phục vấn đề không tương thích với kotlinx-metadata-jvm. (386d5c)
  • Khắc phục vấn đề khiến Room gửi lỗi khi được sử dụng trong kiểm thử Robolectric. (f79bea, b/274924903)

Phiên bản 2.5.1

Phiên bản 2.5.1

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

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

Sửa lỗi

  • Tránh kiểm tra thư mục mẹ của cơ sở dữ liệu trong FrameworkSQLiteHelper nếu cơ sở dữ liệu đã mở. (5de86b8)
  • Sử dụng tính năng kiểm tra isOpenInternal khi kiểm tra xem cơ sở dữ liệu đã mở hay chưa. (e91fb35)
  • Giờ đây, bạn có thể xử lý trường hợp tái nhập trong acquireTransactionThread() của Room tốt hơn. (219f98b). Trong một giao dịch tạm ngưng, Room sử dụng một luồng từ trình thực thi giao dịch, bắt đầu một vòng lặp sự kiện trong luồng đó và gửi các thao tác tạm ngưng cơ sở dữ liệu đến luồng đó để tất cả các thao tác đó được đóng gói trong coroutine giao dịch. Luồng giao dịch thường khác với luồng bắt đầu giao dịch, nhưng trong một số trường hợp, chúng giống nhau. Để xử lý các trường hợp tái nhập như vậy, withTransaction() đã được tái cấu trúc để không còn phụ thuộc vào công việc kiểm soát mà thay vào đó sẽ thực thi khối giao dịch tạm ngưng từ bên trong runBlocking trong luồng giao dịch.

Phiên bản 2.5.0

Phiên bản 2.5.0

Ngày 22 tháng 2 năm 2023

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

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