Room
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 7 tháng 8 năm 2024 | 2.6.1 | - | - | 2.7.0-alpha06 |
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 Room và Room 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:
Groovy
dependencies { def room_version = "2.6.1" 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.6.1" 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 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 trình xử lý chú giải sau đây.
room.schemaLocation |
directory
Cho phép xuất giản đồ cơ sở dữ liệu vào tệp JSON trong thư mục. Xem bài viết 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. Cần phải có KSP. Giá trị mặc định là false .
Hãy xem ghi chú trong phiên bản 2.6.0 để biết thêm 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ợ này định cấu hình dự án như đã tạo ra giản đồ (là kết quả của các tác vụ biên dịch và được tiêu thụ cho quá trình tự động di chuyển) được định cấu hình chính xác để có thể tái tạo và bản dựng có thể lưu vào bộ nhớ đệm.
Để thêm trình bổ trợ này, 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à dùng room
tiện ích.
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. Chiến dịch này
sẽ định cấu hình trình biên dịch Room cũng như nhiều tác vụ biên dịch cũng như phần phụ trợ của nó
(javac, KAPT, KSP) để xuất tệp giản đồ vào các thư mục có phiên bản khác nhau, ví dụ:
schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Những tệp này sẽ
đã kiểm tra kho lưu trữ để được sử dụng cho việc xác thực và tự động di chuyển.
Không thể định cấu hình một số tuỳ chọn trong tất cả các phiên bản của Trình bổ trợ Room cho Gradle,
mặc dù chúng được trình biên dịch Room hỗ trợ. Bảng bên dưới liệt kê mỗi
và cho thấy phiên bản Trình bổ trợ Room cho Gradle đã thêm tính năng hỗ trợ cho
đị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 lựa chọn này chưa được hỗ trợ, bạn có thể sử dụng
tuỳ chọn trình xử lý chú giải.
Lựa chọn | 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 bạn không sử dụng trình bổ trợ Room cho Gradle hoặc nếu tuỳ chọn bạn muốn không dùng mà phiên bản trình bổ trợ của bạn hỗ trợ, bạn có thể định cấu hình Room bằng cách sử dụng tuỳ chọn trình xử lý chú giải, như được mô tả trong Thêm phần phụ thuộc của bản dựng. Cách bạn chỉ định tuỳ chọn chú thích tuỳ 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... ) } } } }
Vì room.schemaLocation
là một thư mục chứ không phải kiểu dữ liệu nguyên thuỷ nên lớp này
bạn cần phải sử dụng CommandLineArgumentsProvider
khi thêm tuỳ chọn này để
mà Gradle biết về thư mục này khi tiến hành các bước kiểm tra cập nhật.
Di chuyển cơ sở dữ liệu Room
cho thấy quá trình triển khai CommandLineArgumentsProvider
hoàn chỉnh, 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.
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-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 thực thể cho
RoomDatabase
trong dự án KMP.
Do mô hình biên dịch Kotlin 2.0, chiến lược tham chiếu một hàm sẽ được tạo (có tên là instantiateImpl()
) sẽ sử dụng được lâu hơn. Hai API mới là @ConstructedBy
và RoomDatabaseConstructor
được ra mắt để thay thế cho chiến lược instantiateImpl()
. Chiến lược mới như sau:
Xác định đối tượng dự kiến triển khai
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
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
Tạo một thực thể cơ sở dữ liệu mới nhưng không truyền đối số ban đầu
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
Bản sửa lỗi b/316978491, b/338446862 và b/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ữ lại 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 của@RawQuery
hiện có thể chấp nhậnRoomRawQuery
làm tham số duy nhất. (Iea844, b/330586815) - Thêm phương thức nạp chồng
setQueryCallback()
chấp nhậnCoroutineContext
. (Id66ff, b/309996304) - Thêm tuỳ chọn hỗ trợ cho các mục tiêu Đa nền tảng Kotlin
linuxArm64
(I139d3, b/338268719)
Sửa lỗi
- Khắc phục vấn đề Room tạo sai lệnh gọi đến
recursiveFetchArrayMap
trên các mục tiêu không phải Android. (710c36, b/352482325) - Khắc phục sự cố trong đó đôi khi Room 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 tự động di chuyển. Quá trình này sẽ kiểm tra khoá ngoại quá sớm trước khi các bảng khác thay đổi giản đồ để phù hợp với 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ànhSQLite
vàBundledSQLiteKt
thànhBundledSQLite
. (I8b501)
Sửa lỗi
- Khắc phục lỗi
RoomDatabase
tắc nghẽn hoặc lỗi hết thời gian chờ kết nối khi sử dụngAndroidSQLiteDriver
.
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 xác định kiểu dữ liệu trả về nhiều bản đồ trong DAO. (b/340983093)
- Khắc phục vấn đề Room không tìm được phương thức triển khai cơ sở dữ liệu đã tạo nếu lớp được chú thích
@Database
không có gói nào. (b/342097292) - Khắc phục vấn đề việc bật chế độ tự động đóng và vô hiệu hoá nhiều phiên bản đôi khi dẫn đến
ConcurrentModificationException
khi cơ sở dữ liệu tự động đóng do không hoạt động.
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 các vấn đề liên quan đến Kotlin 2.0 và KSP 2.0. Lưu ý rằng Kotlin 2.0 có hỗ trợ KSP 2 chưa hoàn chỉnh và nhóm chúng tôi đang nghiên cứu các API khác nhau cũng như các 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 đề 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ợ đa nền tảng Kotlin (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, bản phát hành này giới thiệu phiên bản Room mới trong đó phần lớn chức năng đã được "phổ biến hoá" (được thiết kế để hoạt động đa nền tảng). Các nền tảng được hỗ trợ hiện tại là Android, iOS, JVM (Máy tính), Mac gốc và Linux gốc. Mọi chức năng còn thiếu trong các nền tảng mới được hỗ trợ sẽ được chuyển thành "tính năng hoàn chỉnh" 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ính năng 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 qua KSP. Đối với các dự án chỉ dùng KAPT hoặc Java, Room vẫn sẽ tạo các nguồn Java.
Thay đổi về API
- Phương thức nạp chồng của
Room.databaseBuilder()
đã được thêm vào để lấy tham số lambda được dùng với hàm do Room tạo nhằm tránh sử dụng chế độ phản chiếu khi tạo thực thể cho phương thức triển khaiRoomDatabase
đã tạo. Ví dụ về cách sử dụng:
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- Một API để định cấu hình Room bằng
CoroutineContext
đã được thêm vào trình tạo:RoomDatabase.Builder.setQueryCoroutineContext
. Lưu ý rằngRoomDatabase
chỉ có thể được định cấu hình bằng một trong hai trình thực thi (executor) bằngsetQueryExecutor
hoặc thông qua ngữ cảnh Coroutine (Coroutine), chứ không được dùng cả hai. - Thêm một 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ểnSQLite
, hãy tham khảo tài liệu về SQLite KMP - Các API để truy cập vào
SQLiteConnection
cơ bản qua các API trình điều khiển đã được thêm vào:RoomDatabase.useReaderConnection
vàRoomDatabase.useWriterConnection
. - Các lệnh gọi lại liên quan đến Phòng Varios hiện có phiên bản nạp chồng nhận
SQLiteConnection
thay vìSupportSQLiteDatabase
. Các lựa chọn này sẽ bị ghi đè khi chuyển sang dự án KMP. Để biết thêm thông tin về cách di chuyển dữ liệu sử dụng Room trong một ứng dụng Android sang một 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 bao gồm: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ớiandroidx.room:room-runtime
cùng với tất cả API của cấu phần phần mềm đó, cấu phần phần mềm này hiện bị trống. Vui lòng xoá phần phụ thuộc này 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
- Vấn đề đã giải quyết trong mã được tạo, trong đó giá trị mặc định cho cột Kép trong
EntityCursorConverter
đang được đặt thành 0 thay vì 0. Chúng tôi cũng có bản sửa lỗi có thể áp dụng cho trường hợp cạnh tương tự cho các cột loại Độ chính xác đơn. (Id75f5, b/304584179) - Giờ đây, các ngoại lệ được gửi từ các lần tải
PagingSource
sẽ được truyền dưới dạngLoadStateUpdate
củaLoadResult.Error
chứa lớp Throwable. Bạn có thể quan sát trạng thái lỗi này thông quaPagingDataAdapter.loadStateFlow(Views)
hoặcLazyPagingItems.loadState(Compose)
. Xin lưu ý rằng việc này đánh dấu sự 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 lượ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
- Tuỳ chọn bật tính năng tạo mã Kotlin (hay “Kotlin CodeGen”) hiện đã có 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 chuyển các tuỳ chọn bộ 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 chúng tôi cũng bổ sung một số hạn chế khác. Các thuộc tính trừu tượng dưới dạng các truy vấn getter hoặc DAO của DAO trong Kotlin CodeGen không được phép và thay vào đó sẽ được viết lại dưới dạng các hàm để tránh quan niệm sai lầm rằng giá trị thuộc tính không thể thay đổi và có kết quả được lưu trữ cố định. Chúng tôi cũng bổ sung một hạn chế khác là các kiểu dữ liệu trả về của bộ sưu tập rỗng không còn được cho phép trong Room đối với 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 các đối số loại là rất quan trọng, các phiên bản Java khác 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 bất kỳ vấn đề nào, nhưng trong Kotlin CodeGen, bạn sẽ gặp lỗi. Để tránh trường hợp này, bạn sẽ 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
. Mã này sẽ giải quyết nhiều vấn đề hiện có trong Room về việc có dữ liệu đầ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 của 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)
- Room hiện hỗ trợ loại dữ liệu trả về của Bản đồ lồng nhau trong các hàm DAO. (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 cập nhật và cập nhật khi trường hợp ngoại lệ2067 SQLITE_CONSTRAINT_UNIQUE
được gửi trong quá trình cập nhật, chèn và 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
Thay đổi về API
- Một chú giải kiểu mới có tên là
@MapColumn
đã được tạo để 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ú thích@MapInfo
, bạn sẽ phải khai báo chú thích@MapColumn
chỉ bằngcolumnName
và sử dụng chú giải này trên đối số loại cụ thể đang được tham chiếu (khoá hoặc giá trị của Map) trong loại dữ liệu trả về của hàm DAO. Điều này là do chú giải@MapColumn
được dùng trực tiếp trên đối số loại trong kiểu 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@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 theo từng biến thể. Điều này có nghĩa là trình bổ trợ này có thể chấp nhận một vị trí chung cho mọi biến thể mà không cần tạo nhiều thư mục, giúp quá trình di chuyển diễn ra suôn sẻ hơn, đồng thời đủ 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ợ (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 khả năng xảy ra lỗ hổng bảo mật bộ nhớ bị rò rỉ 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 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 đưa dữ liệu đầ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 của Gradle. Trình bổ trợ Room cho Gradle sẽ định cấu hình dự án sao cho các giản đồ đã tạo được dùng cho quá trình tự động di chuyển và là kết quả của 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ợ này 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ợ này sẽ định cấu hình trình biên dịch Room cũng như nhiều tác vụ biên dịch và phần phụ trợ của trình biên dịch đó (javac, KAPT, KSP) để xuất tệp giản đồ vào các thư mục có hương vị, tức là schemas/flavorOneDebug/com.package.MyDatabase/1.json
. Như thường lệ, những tệp này được nhập vào kho lưu trữ để dùng cho việc xác thực và tự động di chuyển. Khi chuyển sang sử dụng trình bổ trợ thay vì 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 các thư mục phiên bản do trình bổ trợ tạo ra. Đây là thao tác di chuyển một lần phải được thực hiện theo cách thủ công. Tài liệu giản đồ trên developers.android.com sẽ được cập nhật trong tương lai sau khi ý kiến phản hồi được giải quyết và trình bổ trợ đạt đến phiên bản ổn định, vì vậy, hãy dùng thử.
Thay đổi về API
RoomDatabase.QueryCallback
đã được định nghĩa 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 thực thể 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 chuyển các tuỳ chọn bộ 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 chúng tôi cũng bổ sung một số hạn chế khác. Các thuộc tính trừu tượng dưới dạng các truy vấn getter hoặc DAO của DAO trong Kotlin CodeGen không được phép và thay vào đó sẽ được viết lại dưới dạng các hàm để tránh quan niệm sai lầm rằng giá trị thuộc tính không thể thay đổi và có kết quả được lưu trữ cố định. Chúng tôi cũng bổ sung một hạn chế khác là các kiểu dữ liệu trả về của bộ sưu tập rỗng không còn được cho phép trong Room đối với 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 các đối số loại là rất quan trọng, các phiên bản Java khác 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 bất kỳ vấn đề nào, nhưng trong Kotlin CodeGen, bạn sẽ gặp lỗi. Để tránh trường hợp này, bạn sẽ 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 vô nghĩa các tập hợ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 API để tạo Luồng phát ra các thay đổi trình theo dõi không hợp lệ. API này rất hữu ích khi 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 sử dụng các thuộc tính trừu tượng dưới dạng phương thức getter hoặc truy vấn DAO của DAO trong trình tạo mã Kotlin. Thay vào đó, các thuộc tính này nên được viết lại dưới dạng hàm để tránh quan niệm sai lệch rằng giá trị thuộc tính là không thể thay đổi và có kết quả được lưu trữ 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 sự cố khiến Room gặp lỗi khi sử dụng trong chương trình 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 tuỳ chọn kiểm tra
isOpenInternal
khi kiểm tra xem cơ sở dữ liệu đã mở hay chưa. (e91fb35) - Hiện tại, bạn có thể xử lý tốt hơn trường hợp truy xuất lại trong
acquireTransactionThread()
của Room. (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 vòng lặp sự kiện trong đó và gửi các hoạt động tạm ngưng cơ sở dữ liệu đến trình thực thi đó để tất cả đều được đóng gói trong coroutine giao dịch. Thông thường, luồng giao dịch sẽ khác với luồng bắt đầu giao dịch, nhưng trong một số trường hợp thì chúng giống nhau. Để xử lý các trường hợp truy xuất lại như vậy,withTransaction()
đã được tái cấu trúc để không còn dựa vào công việc kiểm soát nữa. Thay vào đó, hệ thống sẽ thực thi khối giao dịch tạm ngưng từ bên trongrunBlocking
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.0
và androidx.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à trongInvalidationTracker
, giờ đây, bạn sẽ cần khai báoonInvalidate()
trongObserver
để có tham số loạiSet
chứ không phảiMutableSet
. 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-rxjava3
vàroom-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
,getQueryExecutor
vàgetTransactionExecutor
. (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
- Cấu phần phần mềm
room-paging
mớiroom-paging-rxjava2
,room-paging-rxjava3
vàroom-paging-guava
đã được thêm để hỗ trợ trong Room Paging.(41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/2061})
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, bb/})2Lư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áoonInvalidate()
trongObserver
để có tham số loạiSet
chứ không phảiMutableSet
. - 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
trongroom-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ằngAutoMigrationSpec
sẽ được cung cấp trong thời gian chạy thông quaRoomDatabase.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ư trongrunMigrationsAndValidate
. - 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ớiImmutableMap
,ImmutableSetMultimap
vàImmutableListMultimap
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 quaRoomDatabase.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
- Thêm trình chuyển đổi kiểu (type converter) tích hợp cho UUID. (I671e8, b/73132006)
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ớiImmutableMap
,ImmutableSetMultimap
vàImmutableListMultimap
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 coroutineFlow
.
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 khiLoadParams.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ư trongrunMigrationsAndValidate
.
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ằngAutoMigrationSpec
sẽ được cung cấp trong thời gian chạy thông quaRoomDatabase.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ạiInvalidationTracker
đô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
- Thêm tính năng hỗ trợ biên dịch gia tăng cho KSP. (I031c1, b/176453350)
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ằngksp
. Ví dụ: thay vìkapt 'androidx.room:room-compiler:2.3.0-beta02'
, hãy sử dụngksp '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 quaRoomDatabase.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
trongRoomDatabase.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 trongRoomDatabase
bằngCollections.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ộtroom.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.4
và androidx.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ạoRoomDatabase
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òncreateFromFile()
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ớidefaultValue
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ớiassociateBy
đư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ạiList
hoặcSet
đã đượ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
và@Delete
hiện có một thuộc tính mớitargetEntity
, 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ụngFlow
rồi dùng các hàm lân cận để chuyển đổiFlow
thànhChannel
. 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ênSongIdAndTitle
với chỉ hai trường. Sau đó, Room sẽ ghi lại truy vấn thànhSELECT 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áoCURSOR_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ụngFlow
rồi dùng các hàm lân cận để chuyển đổiFlow
thànhChannel
. 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ênSongIdAndTitle
với chỉ hai trường. Sau đó, Room sẽ ghi lại truy vấn thànhSELECT 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áoCURSOR_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àoRoomDatabase.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ụngByteBuffer
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
và@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ạoRoomDatabase
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òncreateFromFile()
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ớidefaultValue
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/64088772Lư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ớiassociateBy
đư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ạiList
hoặcSet
đã đượ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
và@Delete
hiện có một thuộc tính mớitargetEntity
, 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 íchRoomDatabase.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
và@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ứaINSERT
,DELETE
hoặc câu lệnhUPDATE
, hiện hỗ trợ loại trả về RxCompletable
,Single
,Maybe
, và loại trả về của GuavaListenableFuture
, 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 trongRoomDatabase.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 trongRoomDatabase.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ọccoroutineScope { }
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ềmroom-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ànhroom-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
,setTransactionSuccessful
vàendTransaction
trongRoomDatabase
đã ngừng hoạt động vìrunInTransaction
vàroom-ktx
tiện íchwithTransaction
.
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ệnhINSERT
,UPDATE
hoặcDELETE
đang chuẩn bị truy vấn trong luồng chính. b/123695593 - Khắc phục nhiều lỗi trong đó Room tạo mã không chính xác cho một số hàm tạm ngưng nhất định. b/123466702 và b/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êmmaven { 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ệnhINSERT
,UPDATE
hoặcDELETE
hiện có thể trả về các loại không đồng bộSingle
,Mayble
,Completable
vàListenableFuture
. 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ặcListenableFuture
. 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.FAIL
vàOnConflictStrategy.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()
và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 trongFtsOptions
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ứcIN
. 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
và@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ề RxCompletable
,Single<T>
và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 trongRoomDatabase.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/62334005fallbackToDestructiveMigrationOnDowngrade
: Là một API mới trongRoomDatabase.Builder
để tự động tạo lại cơ sở dữ liệu nếu quá trình hạ cấp diễn ra. b/110416954ignoredColumns
: 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
mCallback
vàmDatabase
trongRoomDatabase
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/111504749 và b/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
Single
vàMaybe
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ặcMaybe
. 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ềnString
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 chovararg 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ínhobservedEntities
, miễn là Pojo tham chiếu đến một hoặc nhiều thực thể qua các trườngEmbedded
hoặcRelation
. 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/71458963fallBackToDestructiveMigrationsFrom
: API mới này trongRoomDatabase.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 pagingalpha-4
trở lên và chuyển từLivePagedListProvider
sangLivePagedListBuilder
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