ห้อง
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
9 เมษายน 2025 | 2.7.0 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่ม Dependency ของ Room คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
ไลบรารีที่ต้องพึ่งพาสําหรับ Room ได้แก่ การทดสอบการย้ายข้อมูล Room และ Room RxJava
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูล
Kotlin
dependencies { val room_version = "2.7.0" 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.7.0" 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" }
ดูข้อมูลเกี่ยวกับการใช้ปลั๊กอิน KAPT ได้ที่เอกสารประกอบของ KAPT
ดูข้อมูลเกี่ยวกับการใช้ปลั๊กอิน KSP ได้ที่เอกสารประกอบเริ่มต้นใช้งาน KSP
ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ได้ที่เอกสารประกอบ ktx
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
สำหรับไลบรารีที่ไม่ใช่ Android (เช่น โมดูล Gradle ของ Java หรือ Kotlin เท่านั้น) คุณสามารถใช้ androidx.room:room-common
เพื่อใช้คำอธิบายประกอบ Room ได้ (ไม่บังคับ)
การกำหนดค่าตัวเลือกคอมไพเลอร์
Room มีตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบดังต่อไปนี้
room.schemaLocation |
directory
เปิดใช้การส่งออกสคีมาฐานข้อมูลไปยังไฟล์ JSON ในไดเรกทอรีที่ระบุ ดูข้อมูลเพิ่มเติมได้ที่การย้ายข้อมูลห้องพัก |
room.incremental |
boolean
เปิดใช้โปรแกรมประมวลผลคำอธิบายประกอบแบบเพิ่มของ Gradle ค่าเริ่มต้นคือ true
|
room.generateKotlin |
boolean
สร้างไฟล์ต้นทาง Kotlin แทน Java ต้องใช้ KSP ค่าเริ่มต้นคือ false
ดูรายละเอียดเพิ่มเติมได้ในหมายเหตุของเวอร์ชัน 2.6.0
|
ใช้ปลั๊กอิน Gradle ของ Room
เมื่อใช้ Room เวอร์ชัน 2.6.0 ขึ้นไป คุณจะใช้ปลั๊กอิน Gradle ของ Room เพื่อกำหนดค่าตัวเลือกสำหรับคอมไพเลอร์ Room ได้ ปลั๊กอินจะกําหนดค่าโปรเจ็กต์เพื่อให้สคีมาที่สร้าง (ซึ่งเป็นเอาต์พุตของงานคอมไพล์และใช้สําหรับการย้ายข้อมูลอัตโนมัติ) ได้รับการกําหนดค่าอย่างถูกต้องเพื่อให้มีบิลด์ที่ทําซ้ำได้และแคชได้
หากต้องการเพิ่มปลั๊กอิน ให้กำหนดปลั๊กอินและเวอร์ชันในไฟล์บิลด์ Gradle ระดับบนสุด
Groovy
plugins { id 'androidx.room' version "$room_version" apply false }
Kotlin
plugins { id("androidx.room") version "$room_version" apply false }
ในไฟล์บิลด์ Gradle ระดับโมดูล ให้ใช้ปลั๊กอินและใช้ส่วนขยาย room
Groovy
plugins { id 'androidx.room' } android { ... room { schemaDirectory "$projectDir/schemas" } }
Kotlin
plugins { id("androidx.room") } android { ... room { schemaDirectory("$projectDir/schemas") } }
ต้องตั้งค่า schemaDirectory
เมื่อใช้ปลั๊กอิน Gradle ของ Room ซึ่งจะกําหนดค่าคอมไพเลอร์ Room และงานคอมไพล์ต่างๆ รวมถึงแบ็กเอนด์ (javac, KAPT, KSP) เพื่อส่งออกไฟล์สคีมาไปยังโฟลเดอร์ที่มีรูปแบบ เช่น schemas/flavorOneDebug/com.package.MyDatabase/1.json
คุณควรตรวจสอบไฟล์เหล่านี้ในที่เก็บเพื่อใช้ตรวจสอบและการย้ายข้อมูลอัตโนมัติ
ตัวเลือกบางอย่างไม่สามารถกําหนดค่าได้ในปลั๊กอิน Gradle ของ Room บางเวอร์ชัน แม้ว่าคอมไพเลอร์ Room จะรองรับตัวเลือกเหล่านั้นก็ตาม ตารางด้านล่างแสดงตัวเลือกแต่ละรายการและแสดงเวอร์ชันของปลั๊กอิน Gradle ของ Room ที่เพิ่มการรองรับการกำหนดค่าตัวเลือกนั้นโดยใช้ส่วนขยาย room
หากใช้เวอร์ชันที่ต่ำกว่าหรือระบบยังไม่รองรับตัวเลือกนี้ คุณสามารถใช้ตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบแทน
ตัวเลือก | ตั้งแต่เวอร์ชัน |
---|---|
room.schemaLocation (ต้องระบุ) |
2.6.0 |
room.incremental |
- |
room.generateKotlin |
- |
ใช้ตัวเลือกโปรเซสเซอร์สำหรับคำอธิบายประกอบ
หากคุณไม่ได้ใช้ปลั๊กอิน Room Gradle หรือปลั๊กอินเวอร์ชันของคุณไม่รองรับตัวเลือกที่ต้องการ คุณกำหนดค่า Room ได้โดยใช้ตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบ ตามที่อธิบายไว้ในเพิ่มข้อกำหนดของบิลด์ วิธีระบุตัวเลือกคำอธิบายประกอบจะขึ้นอยู่กับว่าคุณใช้ KSP หรือ KAPT สำหรับ 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
เป็นไดเรกทอรีและไม่ใช่ประเภทพื้นฐาน คุณจึงต้องใช้ CommandLineArgumentsProvider
เมื่อเพิ่มตัวเลือกนี้เพื่อให้ Gradle ทราบเกี่ยวกับไดเรกทอรีนี้เมื่อทำการตรวจสอบข้อมูลล่าสุด
ย้ายข้อมูลฐานข้อมูล Room
แสดงการติดตั้งใช้งาน CommandLineArgumentsProvider
ที่สมบูรณ์ซึ่งระบุตำแหน่งสคีมา
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 2.7
เวอร์ชัน 2.7.0
9 เมษายน 2025
androidx.room:room-*:2.7.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.6.0
- การรองรับ Kotlin Multiplatform (KMP): ในรุ่นนี้ Room ได้รับการรีแฟกทอริงให้กลายเป็นไลบรารี Kotlin Multiplatform (KMP) แพลตฟอร์มที่รองรับในปัจจุบัน ได้แก่ Android, iOS, JVM (เดสก์ท็อป), Mac เวอร์ชันเดิม และ Linux เวอร์ชันเดิม ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งาน Room KMP ได้ที่เอกสารประกอบ Room KMP อย่างเป็นทางการ ในฐานะที่เป็นส่วนหนึ่งของการรองรับ KMP คุณสามารถกำหนดค่า Room ด้วย
SQLiteDriver
ได้ด้วย ดูข้อมูลเกี่ยวกับวิธีย้ายข้อมูลแอปที่มีอยู่ไปยัง Driver API และ Room KMP ได้ที่เอกสารประกอบเกี่ยวกับการย้ายข้อมูล - ระบบจะเปิดการสร้างโค้ด Kotlin ใน KSP ไว้โดยค่าเริ่มต้นหากการประมวลผลดำเนินการผ่าน KSP สำหรับโปรเจ็กต์ KAPT หรือ Java เท่านั้น Room จะยังคงสร้างซอร์สโค้ด Java
- Kotlin 2.0 และ KSP2: ตอนนี้ Room กำหนดเป้าหมายเป็นภาษา Kotlin 2.0 และจะกำหนดให้โปรเจ็กต์ต้องคอมไพล์ด้วย Kotlin 2.0 และภาษาเวอร์ชันที่เทียบเท่าหรือสูงกว่าด้วย นอกจากนี้ เรายังเพิ่มการรองรับ KSP2 ด้วย ซึ่งเราขอแนะนำให้ใช้เมื่อใช้ Room กับ Kotlin 2.0 ขึ้นไป
เวอร์ชัน 2.7.0-rc03
26 มีนาคม 2025
androidx.room:room-*:2.7.0-rc03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-rc03 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ไม่แสดง
InterruptedException
อีกต่อไปเมื่อชุดข้อความถูกขัดจังหวะระหว่างการเรียกใช้ Room Blocking API รวมถึงการบล็อกฟังก์ชัน DAO (b/400584611) - ใช้พูลการเชื่อมต่อของ Room อีกครั้งเพื่อพยายามบรรเทาปัญหา
SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection.
และปัญหาที่คล้ายกัน (b/380088809)
เวอร์ชัน 2.7.0-rc02
12 มีนาคม 2025
androidx.room:room-*:2.7.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-rc02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการย้ายข้อมูลอัตโนมัติที่จัดการคอลัมน์ใหม่ในตาราง FTS อย่างไม่ถูกต้อง (b/348227770, Ic53f3)
- แก้ไขข้อขัดข้องของคอมไพเลอร์ห้องเนื่องจาก
NullPointerException
เมื่อประมวลผลแหล่งที่มาที่ไม่ใช่ JVM ผ่าน KSP (b/396607230, I693c9) - แก้ไขปัญหาที่ Room จะไม่ทำให้ตารางเป็นโมฆะเมื่อสิ้นสุดการใช้การเชื่อมต่อของผู้เขียน (b/340606803, I73ef6)
เวอร์ชัน 2.7.0-rc01
26 กุมภาพันธ์ 2025
androidx.room:room-*:2.7.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room จะไม่ตั้งค่า
busy_timeout
ในการเชื่อมต่อฐานข้อมูลครั้งแรก ซึ่งจะทำให้เกิดปัญหาSQLException: Error code: 5, message: database is locked
(I93208, b/380088809) - แก้ไขข้อบกพร่องในคอมไพเลอร์ของ Room ที่อาจทําให้โปรแกรมประมวลผล KSP ขัดข้องเมื่อประมวลผลชุดแหล่งที่มาแบบเนทีฟ (เช่น iOS) ใน Kotlin 2.1.x และ KSP1 (I883b8, b/396607230)
เวอร์ชัน 2.7.0-beta01
12 กุมภาพันธ์ 2025
androidx.room:room-*:2.7.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-beta01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ
RoomDatabase.inTransaction()
ที่เปิดฐานข้อมูลที่ปิดอยู่เมื่อไม่ควรเปิด และควรแสดงผลเป็นเท็จอย่างรวดเร็วหากฐานข้อมูลปิดอยู่ (b/325432967) - แก้ไขข้อขัดข้อง (
IllegalArgumentException: not a valid name
) ในคอมไพเลอร์ของ Room เมื่อประมวลผลฟังก์ชัน DAO ด้วยคลาสค่า / อินไลน์ของ Kotlin (b/388299754) - รวมกฎ Proguard ไว้ในอาร์ติแฟกต์ JVM ของ
room-runtime
เพื่อไม่ให้ระบบนำตัวสร้างเริ่มต้นของการใช้งานฐานข้อมูลที่สร้างขึ้นออก เนื่องจากมีการใช้โดยการสร้างเริ่มต้นเริ่มต้นของ Room ที่ใช้การสะท้อน (b/392657750)
เวอร์ชัน 2.7.0-alpha13
29 มกราคม 2025
androidx.room:room-*:2.7.0-alpha13
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha13 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Room กำหนดเป้าหมายเป็นภาษา Kotlin 2.0 และจะกำหนดให้โปรเจ็กต์ต้องคอมไพล์ด้วย Kotlin 2.0 และภาษาเวอร์ชันที่เทียบเท่าหรือสูงกว่าด้วย (I8efb0, b/315461431, b/384600605)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในเครื่องมือสร้างฐานข้อมูล KMP ของ Room เมื่อใช้ชื่อธรรมดาแทนเส้นทางใน Android และเส้นทางที่แก้ไขแล้วของไฟล์ฐานข้อมูลจะไม่อยู่ในไดเรกทอรีข้อมูลของแอป (I83315, b/377830104)
- แก้ไขปัญหาเกี่ยวกับปลั๊กอิน Room Gradle ที่การกําหนดค่าอินพุตและเอาต์พุตสคีมาทําให้เกิดปัญหาในโปรเจ็กต์ Android:
property 'inputDirectory' is final and cannot be changed any further.
(1dbb4c, b/376071291) - เพิ่มการรองรับ KSP2 ในปลั๊กอิน Gradle ของ Room เพื่อแก้ไขปัญหาที่ปลั๊กอินไม่ได้ตั้งค่าไดเรกทอรีสคีมาอย่างถูกต้อง (Iec3c4, b/379159770)
การมีส่วนร่วมจากภายนอก
- แก้ไขปัญหาการผสานรวมการแบ่งหน้า
Room
ทําให้ UI กระโดดเมื่อคีย์แรกในการรีเฟรชอยู่ใกล้กับท้ายรายการมากเกินไป ขอขอบคุณ Eva (I2abbe, b/389729367)
เวอร์ชัน 2.7.0-alpha12
11 ธันวาคม 2024
androidx.room:room-*:2.7.0-alpha12
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha12 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม API เวอร์ชันทดลอง
RoomDatabase.Builder.setInMemoryTrackingMode()
เพื่อกำหนดค่าว่า Room จะใช้ตารางในหน่วยความจำหรือไม่สำหรับการติดตามการลบล้าง (I2a9b2, b/185414040)
การแก้ไขข้อบกพร่อง
- ตอนนี้การย้ายข้อมูลแบบทำลายล้างจะทิ้งมุมมองเพื่อให้ระบบสร้างมุมมองขึ้นมาใหม่ โดยปรับให้ลักษณะการทำงานเมื่อ
allowDestructiveMigrationForAllTables
เปิดอยู่ (ค่าเริ่มต้นของ KMP) สอดคล้องกับลักษณะการทำงานที่มีอยู่เมื่อปิดอยู่ (0a3e83, b/381518941)
เวอร์ชัน 2.7.0-alpha11
30 ตุลาคม 2024
androidx.room:room-*:2.7.0-alpha11
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha11 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- กลับไปดูลายเซ็นเมธอด
convertRows()
ที่เพิ่มใหม่เพื่อใช้เป็นฟังก์ชันการระงับที่รับRawRoomQuery
สําหรับการแบ่งหน้าห้อง (Ie57b5, b/369136627)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการจัดเรียงหน้าของห้องซึ่งระบบจะสร้างโค้ดที่ไม่ถูกต้องเมื่อใช้
@Relation
ร่วมกับPagingSource
เวอร์ชัน 2.7.0-alpha10
16 ตุลาคม 2024
androidx.room:room-*:2.7.0-alpha10
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha10 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- สร้างคลาส
ByteArrayWrapper
ภายในเพื่อรองรับความสัมพันธ์กับByteBuffer
ในแพลตฟอร์มที่ไม่ใช่ Android และไม่ใช่ JVM (I75543, b/367205685) - เพิ่ม
SQLiteStatement.getColumnType()
พร้อมกับค่าคงที่ผลลัพธ์SQLITE_DATA_*
ต่างๆ เพื่อเปิดใช้การดึงข้อมูลประเภทของคอลัมน์ (I1985c, b/369636251)
เวอร์ชัน 2.7.0-alpha09
2 ตุลาคม 2024
androidx.room:room-*:2.7.0-alpha09
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha09 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการติดตั้งใช้งาน
room-paging
ของ KMP ซึ่งจะทําให้เกิดError code: 8, message: attempt to write a readonly database
เนื่องจากการเริ่มธุรกรรมการเขียนในการเชื่อมต่อการอ่าน (b/368380988)
เวอร์ชัน 2.7.0-alpha08
18 กันยายน 2024
androidx.room:room-*:2.7.0-alpha08
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha08 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ย้ายข้อมูลอาร์ติแฟกต์
room-paging
ให้ใช้งานร่วมกับ KMP ได้ (Ib8756, b/339934824) - API
invalidationTrackerFlow()
ได้กลายเป็น API ของบุคคลที่หนึ่งอย่างInvalidationTracker.createFlow()
และพร้อมใช้งานสำหรับชุดแหล่งที่มาที่ไม่ใช่ Android ในโปรเจ็กต์ KMP แล้ว (I1fbfa, (I8fb29), b/329291639, b/329315924)
การเปลี่ยนแปลง API
- เราได้นําคําเตือนและข้อความแสดงข้อผิดพลาดทั้งหมดใน Room ที่ใช้คําว่า
Cursor
ออกหรือแทนที่ด้วยคําอื่นแล้ว เนื่องจากCursor
ไม่ใช่คําทั่วไปที่ถูกต้องสําหรับใช้ใน Room เวอร์ชัน KMP อีกต่อไป (Id8cd9, b/334087492)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room KMP จะพยายามแสดงโค้ดโดยใช้
UUID
สำหรับแพลตฟอร์มที่ไม่ใช่ JVM (b/362994709) - แก้ไขปัญหาเกี่ยวกับปลั๊กอิน Gradle ของ Room ที่ทำให้เกิดข้อผิดพลาด เช่น "เปลี่ยนแอตทริบิวต์ของการกำหนดค่าไม่ได้ … หลังจากที่มีการล็อกไว้สำหรับการเปลี่ยน" เมื่อใช้ในโปรเจ็กต์ KMP ที่มี Compose Multiplatform (b/343408758)
เวอร์ชัน 2.7.0-alpha07
21 สิงหาคม 2024
androidx.room:room-*:2.7.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha07 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ปลั๊กอิน Gradle ของ Room จะเพิ่มสคีมาแบบส่งออกลงในแหล่งข้อมูลการทดสอบเครื่องมือวัดประสิทธิภาพของ Android โดยอัตโนมัติเพื่อให้
MigrationTestHelper
นำไปใช้ได้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับ "จริง" ที่สร้างขึ้นของ
RoomDatabaseConstructor
ที่ไม่มีตัวแก้ไข "จริง" ในฟังก์ชันinitialize
หากมีการลบล้างฟังก์ชันดังกล่าวในการประกาศ "คาดหวัง" ด้วย (359631627) - แก้ไขปัญหาเกี่ยวกับ "จริง" ที่สร้างขึ้นของ
RoomDatabaseConstructor
ไม่ตรงกับระดับการเข้าถึงของประกาศ "คาดหวัง" (358138953)
เวอร์ชัน 2.7.0-alpha06
7 สิงหาคม 2024
androidx.room:room-*:2.7.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยนการตั้งค่าการสร้างอินสแตนซ์สําหรับ
RoomDatabase
ในโปรเจ็กต์ KMP
กลยุทธ์การอ้างอิงฟังก์ชันที่กำลังจะสร้างขึ้นซึ่งมีชื่อว่า instantiateImpl()
จะใช้ไม่ได้อีกต่อไปเนื่องจากรูปแบบการคอมไพล์ของ Kotlin 2.0 เราได้เปิดตัว 2 รายการ API ใหม่ ได้แก่ @ConstructedBy
และ RoomDatabaseConstructor
ซึ่งมาแทนที่กลยุทธ์ instantiateImpl()
กลยุทธ์ใหม่มีดังนี้
กําหนดออบเจ็กต์การคาดหวังที่ใช้
RoomDatabaseConstructor
expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
ลิงก์ออบเจ็กต์กับการประกาศ
@Database
โดยใช้@ConstructedBy
@Database(...) @ConstructedBy(MyDatabaseCtor::class) // NEW abstract class MyDatabase : RoomDatabase
สร้างอินสแตนซ์ฐานข้อมูลใหม่โดยไม่ส่งอาร์กิวเมนต์ของ Factory
fun createNewDatabase(path: String) = Room.databaseBuilder<AppDatabase>(name = path) .setDriver(BundledSQLiteDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build()
แก้ไข b/316978491, b/338446862 และ b/342905180
- การรองรับ
@RawQuery
ใน Room KMP ด้วยการเพิ่ม API ใหม่ชื่อRoomRawQuery
ซึ่งคล้ายกับSupportSQLiteQuery
ในแง่ของการเก็บสตริง SQL ดิบไว้และฟังก์ชันเพื่อเชื่อมโยงอาร์กิวเมนต์เข้ากับคำสั่ง ตอนนี้ฟังก์ชันที่มีคำอธิบายประกอบ@RawQuery
ยอมรับRoomRawQuery
เป็นพารามิเตอร์เดียวได้แล้ว (Iea844, b/330586815) - เพิ่มการโอเวอร์โหลดของ
setQueryCallback()
ที่ยอมรับCoroutineContext
(Id66ff, b/309996304) - เพิ่มการรองรับ
linuxArm64
เป้าหมายแบบหลายแพลตฟอร์มของ Kotlin (I139d3, b/338268719)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room จะสร้างการเรียก
recursiveFetchArrayMap
ในเป้าหมายที่ไม่ใช่ Android อย่างไม่ถูกต้อง (710c36, b/352482325) - แก้ไขปัญหาที่บางครั้ง Room จะแสดงข้อยกเว้นเกี่ยวกับ "หมดเวลาขณะพยายามเชื่อมต่อ" ในโปรเจ็กต์ KMP (fa72d0, b/347737870)
- แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติที่จะตรวจสอบคีย์นอกเร็วเกินไปก่อนที่ตารางอื่นๆ จะเปลี่ยนสคีมาให้สอดคล้องกับคีย์นอกใหม่ (7672c0, b/352085724)
เวอร์ชัน 2.7.0-alpha05
10 กรกฎาคม 2024
androidx.room:room-*:2.7.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha05 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยนชื่อ
SQLiteKt
เป็นSQLite
และBundledSQLiteKt
เป็นBundledSQLite
(I8b501)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่
RoomDatabase
จะหยุดทำงานชั่วคราวหรือแสดงข้อผิดพลาดเนื่องจากการเชื่อมต่อหมดเวลาเมื่อใช้AndroidSQLiteDriver
เวอร์ชัน 2.7.0-alpha04
12 มิถุนายน 2024
androidx.room:room-*:2.7.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha04 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในโปรแกรมประมวลผลคำอธิบายประกอบของ Room ที่จะสร้างโค้ด KMP ที่เข้ากันไม่ได้เมื่อมีการกําหนดประเภทผลลัพธ์แบบหลายแผนที่ DAO (b/340983093)
- แก้ไขปัญหาที่ Room ไม่พบการใช้งานฐานข้อมูลที่สร้างขึ้นหากคลาสที่มีคำอธิบายประกอบ
@Database
ไม่มีแพ็กเกจ (b/342097292) - แก้ไขปัญหาที่บางครั้งการเปิดใช้การปิดอัตโนมัติและการทำให้อินสแตนซ์หลายรายการไม่ถูกต้องจะทำให้เกิด
ConcurrentModificationException
เมื่อฐานข้อมูลปิดโดยอัตโนมัติเนื่องจากไม่มีการใช้งาน
เวอร์ชัน 2.7.0-alpha03
29 พฤษภาคม 2024
androidx.room:room-*:2.7.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha03 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาต่างๆ เกี่ยวกับ Kotlin 2.0 และ KSP 2.0 โปรดทราบว่า Kotlin 2.0 ที่รองรับ KSP 2 ยังไม่สมบูรณ์และทีมกําลังทํางานกับ API และการเปลี่ยนแปลงลักษณะการทํางานต่างๆ ในคอมไพเลอร์ใหม่ (b/314151707)
เวอร์ชัน 2.7.0-alpha02
14 พฤษภาคม 2024
androidx.room:room-*:2.7.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหา KSP ต่างๆ
เวอร์ชัน 2.7.0-alpha01
1 พฤษภาคม 2024
androidx.room:room-*:2.7.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.7.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การรองรับ Kotlin Multiplatform (KMP): ในรุ่นนี้ Room ได้รับการรีแฟกทอริงให้กลายเป็นไลบรารี Kotlin Multiplatform (KMP) แม้ว่าจะยังต้องดำเนินการบางอย่าง แต่รุ่นนี้เป็นการเปิดตัว Room เวอร์ชันใหม่ที่ฟังก์ชันการทำงานส่วนใหญ่ได้รับการ "ทำให้เป็นเวอร์ชันทั่วไป" (ทำให้ใช้งานได้หลายแพลตฟอร์ม) แพลตฟอร์มที่รองรับในปัจจุบัน ได้แก่ Android, iOS, JVM (เดสก์ท็อป), Mac เวอร์ชันเดิม และ Linux เวอร์ชันเดิม ฟังก์ชันการทำงานที่ขาดหายไปในแพลตฟอร์มที่รองรับใหม่จะกลายเป็น "ฟีเจอร์ครบถ้วน" ในรุ่น Room ที่กำลังจะมาถึง
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งาน Room KMP ได้ที่เอกสารประกอบ Room KMP อย่างเป็นทางการ
- ระบบจะเปิดการสร้างโค้ด Kotlin ใน KSP ไว้โดยค่าเริ่มต้นหากการประมวลผลดำเนินการผ่าน KSP สำหรับโปรเจ็กต์ KAPT หรือ Java เท่านั้น Room จะยังคงสร้างซอร์สโค้ด Java
การเปลี่ยนแปลง API
- เราได้เพิ่ม
Room.databaseBuilder()
แบบโอเวอร์โหลดซึ่งใช้พารามิเตอร์ Lambda ที่มีไว้เพื่อใช้กับฟังก์ชันที่ Room สร้างขึ้นเพื่อหลีกเลี่ยงการใช้การสะท้อนเมื่อสร้างอินสแตนซ์การใช้งานRoomDatabase
ที่สร้างขึ้น ตัวอย่างการใช้งานมีดังนี้
Room.databaseBuilder<MyDatabase>(
context = appContext,
name = dbFilePath,
factory = { MyDatabase::class.instantiateImpl() }
)
- เราได้เพิ่ม API สําหรับการกําหนดค่าห้องที่มี
CoroutineContext
ลงในโปรแกรมสร้างRoomDatabase.Builder.setQueryCoroutineContext
โปรดทราบว่าRoomDatabase
จะกำหนดค่าได้โดยใช้ตัวดำเนินการที่ใช้setQueryExecutor
หรือบริบท Coroutine เท่านั้น แต่จะใช้ทั้ง 2 อย่างไม่ได้ - เพิ่ม API สำหรับการกำหนดค่า Room ด้วยไดรเวอร์
SQLite
แล้ว:RoomDatabase.Builder.setDriver()
ดูข้อมูลเพิ่มเติมเกี่ยวกับSQLite
Driver API ได้ที่เอกสารประกอบ SQLite KMP - เราได้เพิ่ม API สำหรับการเข้าถึง
SQLiteConnection
ที่อยู่เบื้องหลังจาก API ของไดรเวอร์แล้ว ได้แก่RoomDatabase.useReaderConnection
และRoomDatabase.useWriterConnection
- ตอนนี้การเรียกกลับที่เกี่ยวข้องกับ Room หลายรายการมีเวอร์ชันที่รับ
SQLiteConnection
แทนSupportSQLiteDatabase
แล้ว การตั้งค่าเหล่านี้มีไว้สำหรับการลบล้างเมื่อย้ายข้อมูลไปยังโปรเจ็กต์ KMP ดูข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลการใช้งาน Room ในแอป Android ไปยังโมดูล KMP ทั่วไปได้ที่คำแนะนำในการย้ายข้อมูล การโทรกลับมีดังนี้Migration.migrate(SQLiteConnection)
AutoMigrationSpec.onPostMigrate(SQLiteConnection)
RoomDatabase.Callback.onCreate(SQLiteConnection)
RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
RoomDatabase.Callback.onOpen(SQLiteConnection)
- อาร์ติแฟกต์ KTX
androidx.room:room-ktx
ผสานรวมกับandroidx.room:room-runtime
พร้อมกับ API ทั้งหมดแล้ว ตอนนี้อาร์ติแฟกต์ว่างเปล่า โปรดนำออกจากรายการทรัพยากร Dependency
เวอร์ชัน 2.6
เวอร์ชัน 2.6.1
29 พฤศจิกายน 2023
androidx.room:room-*:2.6.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในโค้ดที่สร้างขึ้นซึ่งระบบตั้งค่าเริ่มต้นของคอลัมน์ Double ใน
EntityCursorConverter
เป็น 0 แทน 0.0 นอกจากนี้ เรายังได้รวมการแก้ไขที่เป็นไปได้สำหรับกรณีขอบที่คล้ายกันสำหรับคอลัมน์ประเภท Float ไว้ด้วย (Id75f5, b/304584179) - ตอนนี้ข้อยกเว้นที่โยนออกมาจากการโหลด
PagingSource
จะนำไปใช้งานเป็นLoadStateUpdate
ของLoadResult.Error
ที่มี Throwable สถานะข้อผิดพลาดนี้สามารถดูได้ผ่านPagingDataAdapter.loadStateFlow(Views)
หรือLazyPagingItems.loadState(Compose)
โปรดทราบว่าการดำเนินการนี้เป็นการทําการเปลี่ยนแปลงลักษณะการทํางาน ซึ่งที่ผ่านมาข้อผิดพลาดในการโหลดจะแสดงเป็นข้อยกเว้นที่เมธอด dao ที่ทริกเกอร์การโหลดแสดง (I93887, b/302708983)
เวอร์ชัน 2.6.0
18 ตุลาคม 2023
androidx.room:room-*:2.6.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 2.5.0
- ตัวเลือกในการเปิดใช้การสร้างโค้ด Kotlin (หรือ "Kotlin CodeGen") พร้อมใช้งานใน Room KSP แล้ว (4297ec0) หากต้องการเปิด Kotlin CodeGen ใน Room ให้เพิ่มชื่อตัวเลือก
room.generateKotlin
ลงในตัวเลือกโปรเซสเซอร์สำหรับ KSP ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีส่งตัวเลือกเครื่องประมวลผลสำหรับ KSP ได้ในเอกสารประกอบ KSP
หมายเหตุ: เมื่อใช้ Kotlin CodeGen โปรดทราบว่ามีข้อจํากัดเพิ่มเติม ระบบไม่อนุญาตให้ใช้พร็อพเพอร์ตี้นามธรรมเป็น DAO getter หรือ DAO query ใน Kotlin CodeGen และควรเขียนใหม่เป็นฟังก์ชันแทน เพื่อหลีกเลี่ยงความเข้าใจผิดว่าค่าพร็อพเพอร์ตี้เป็นแบบคงที่และมีผลลัพธ์ที่เก็บไว้แบบคงที่ ข้อจำกัดอีกอย่างหนึ่งที่เพิ่มเข้ามาคือไม่อนุญาตให้ใช้ประเภทผลลัพธ์ที่เป็นคอลเล็กชันแบบ Nullable ใน Room สำหรับ CodeGen ของ Kotlin อีกต่อไป
คำเตือน: คุณอาจพบว่าโปรเจ็กต์ของคุณเข้มงวดมากขึ้นในแง่ของ Nullability เมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความเป็น Null ของอาร์กิวเมนต์ประเภทมีความสําคัญ ในขณะที่ใน Java ส่วนใหญ่จะละเว้น ตัวอย่างเช่น สมมติว่าคุณมีประเภทผลลัพธ์เป็น `Flow<foo\>` และตารางว่างเปล่า ใน CodeGen ของ Java การดำเนินการนี้จะไม่ก่อให้เกิดปัญหาใดๆ แต่คุณจะได้รับข้อผิดพลาดใน CodeGen ของ Kotlin หากต้องการหลีกเลี่ยงปัญหานี้ คุณจะต้องใช้ `Flow<foo?\>` โดยสมมติว่าระบบจะแสดงผล Null </foo?\></foo\>
- เราได้เพิ่มอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Gradle ของ Room ที่มีรหัส
androidx.room
ลงใน Room ซึ่งจะช่วยแก้ปัญหาที่มีอยู่มากมายใน Room เกี่ยวกับการมีอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบ Gradle ดูรายละเอียดเพิ่มเติมได้ที่บันทึกประจำรุ่นของ Room เวอร์ชัน 2.6.0-alpha02 - ตอนนี้ KSP รองรับคลาสค่าในเอนทิตีห้องแล้ว (4194095)
- ตอนนี้ Room รองรับประเภทผลลัพธ์แผนที่ที่ฝังอยู่ในฟังก์ชัน DAO แล้ว (I13f48, 203008711)
เวอร์ชัน 2.6.0-rc01
20 กันยายน 2023
androidx.room:room-*:2.6.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-rc01 มีการคอมมิตเหล่านี้
เวอร์ชัน 2.6.0-beta01
23 สิงหาคม 2023
androidx.room:room-*:2.6.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-beta01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- การจัดการข้อยกเว้น
SQLite
กรณีพิเศษระหว่างการอัปเดต พบเมื่อระบบแสดงข้อยกเว้น2067 SQLITE_CONSTRAINT_UNIQUE
ระหว่างการอัปเดต การอัปเดตควรทำการอัปเดต (If2849, b/243039555)
เวอร์ชัน 2.6.0-alpha03
9 สิงหาคม 2023
androidx.room:room-*:2.6.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
การเปลี่ยนแปลง API
- เราได้สร้างคำอธิบายประกอบประเภทใหม่ชื่อ
@MapColumn
ขึ้นมาเพื่อแทนที่@MapInfo
ซึ่งตอนนี้เลิกใช้งานแล้ว สําหรับชื่อคอลัมน์แต่ละชื่อ (keyColumnName
,valueColumnName
หรือทั้ง 2 อย่าง) ที่ระบุในแอตทริบิวต์@MapInfo
คุณจะต้องประกาศแอตทริบิวต์@MapColumn
ด้วยcolumnName
เท่านั้น และใช้แอตทริบิวต์นั้นกับอาร์กิวเมนต์ประเภทที่เฉพาะเจาะจงซึ่งมีการอ้างอิง (คีย์หรือค่าของ Map) ในประเภทผลลัพธ์ของฟังก์ชัน DAO เนื่องจากใช้คำอธิบายประกอบ@MapColumn
กับอาร์กิวเมนต์ประเภทภายในประเภทผลลัพธ์ของฟังก์ชัน DAO โดยตรงแทนที่จะใช้กับฟังก์ชันเอง เช่น@MapInfo
ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ@MapColumn
(Ib0305, b/203008711) - อัปเดตไฟล์ API เพื่อกำกับเนื้อหาการระงับความเข้ากันได้ (I8e87a, b/287516207)
- เราได้อัปเดต API ของปลั๊กอิน Gradle ของ Room เพื่อไม่ให้ต้องมีการกําหนดค่าต่อตัวแปรเสมอไป ซึ่งหมายความว่าปลั๊กอินจะยอมรับตำแหน่งส่วนกลางสำหรับตัวแปรทั้งหมดได้โดยไม่ต้องสร้างไดเรกทอรีหลายรายการ ซึ่งช่วยให้การย้ายข้อมูลราบรื่นขึ้น แต่ก็มีความยืดหยุ่นพอที่จะกำหนดค่า Flavor หรือสคีมาประเภทบิลด์ด้วยตนเองได้ ขณะเดียวกันก็ยังคงได้รับประโยชน์จากปลั๊กอิน (บิลด์ที่ทําซ้ำได้และแคชได้) (I09d6f, b/278266663)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาช่องโหว่หน่วยความจํารั่วไหลที่อาจเกิดขึ้นใน
QueryInterceptorStatement
(I193d1) - แก้ไขลักษณะการทำงานที่ไม่ถูกต้องในฟังก์ชัน
QueryInterceptorDatabase execSQL()
(Iefdc8)
เวอร์ชัน 2.6.0-alpha02
21 มิถุนายน 2023
androidx.room:room-*:2.6.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha02 มีการคอมมิตเหล่านี้
ปลั๊กอิน Gradle ของ Room
รุ่นใหม่นี้มีอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Gradle ของ Room ที่มีรหัส androidx.room
ซึ่งช่วยแก้ปัญหาต่างๆ ที่มีอยู่เกี่ยวกับอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบ Gradle ปลั๊กอิน Gradle ของ Room จะกำหนดค่าโปรเจ็กต์เพื่อให้สคีมาที่สร้างซึ่งใช้สำหรับการย้ายข้อมูลอัตโนมัติและเอาต์พุตของงานคอมไพล์ได้รับการกำหนดค่าอย่างถูกต้องเพื่อให้มีบิลด์ที่ซ้ำได้และแคชได้ ปลั๊กอินมี DSL เพื่อกําหนดค่าตําแหน่งสคีมาพื้นฐาน ดังนี้
room {
schemaDirectory("$projectDir/schemas/")
}
จากนั้นปลั๊กอินจะกำหนดค่าคอมไพเลอร์ Room และงานคอมไพล์ต่างๆ รวมถึงแบ็กเอนด์ (javac, KAPT, KSP) เพื่อส่งออกไฟล์สคีมาไปยังโฟลเดอร์ที่มีรูปแบบต่างๆ เช่น schemas/flavorOneDebug/com.package.MyDatabase/1.json
ตามปกติแล้ว ระบบจะตรวจสอบไฟล์เหล่านี้ในรีโพซิทอรีเพื่อใช้ตรวจสอบและการย้ายข้อมูลอัตโนมัติ เมื่อย้ายข้อมูลไปใช้ปลั๊กอินแทนตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบ คุณต้องคัดลอกไฟล์สคีมาที่มีอยู่ไปยังไดเรกทอรี Flavor ที่สร้างขึ้นโดยปลั๊กอิน ซึ่งการดำเนินการย้ายข้อมูลแบบครั้งเดียวนี้ต้องทำด้วยตนเอง เอกสารประกอบสคีมาใน developers.android.com จะได้รับการอัปเดตในอนาคตเมื่อความคิดเห็นได้รับการแก้ไขและปลั๊กอินทำงานได้อย่างเสถียรแล้ว โปรดลองใช้
การเปลี่ยนแปลง API
RoomDatabase.QueryCallback
ได้รับการกําหนดให้เป็นอินเทอร์เฟซที่ใช้งานได้เพื่ออนุญาตให้ใช้ Conversion ของ SAM (Iab8ea, b/281008549)
การแก้ไขข้อบกพร่อง
- การแก้ปัญหาที่เกิดขึ้นเมื่อสร้างอินสแตนซ์ฐานข้อมูลใน Robolectric หลังจากย้ายข้อมูลแหล่งที่มาของ Room จาก Java ไปยัง Kotlin (Ic053c, b/274924903)
เวอร์ชัน 2.6.0-alpha01
22 มีนาคม 2023
androidx.room:room-*:2.6.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.6.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- คลาสค่าที่รองรับใน Room สำหรับ KSP ตอนนี้ Room รองรับคลาสค่าในเอนทิตีแล้ว (4194095)
- ตอนนี้คุณเปิดใช้การสร้างโค้ด Kotlin(หรือ "Kotlin CodeGen") ใน Room (4297ec0) ได้แล้ว หากต้องการเปิด Kotlin CodeGen ใน Room ให้เพิ่มชื่อตัวเลือก
room.generateKotlin
ลงในตัวเลือกโปรเซสเซอร์สำหรับ KSP ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีส่งตัวเลือกเครื่องประมวลผลสำหรับ KSP ได้ในเอกสารประกอบ KSP
หมายเหตุ: เมื่อใช้ Kotlin CodeGen โปรดทราบว่ามีข้อจํากัดเพิ่มเติม ระบบไม่อนุญาตให้ใช้พร็อพเพอร์ตี้นามธรรมเป็น DAO getter หรือ DAO query ใน Kotlin CodeGen และควรเขียนใหม่เป็นฟังก์ชันแทน เพื่อหลีกเลี่ยงความเข้าใจผิดว่าค่าพร็อพเพอร์ตี้เป็นแบบคงที่และมีผลลัพธ์ที่เก็บไว้แบบคงที่ ข้อจำกัดอีกอย่างหนึ่งที่เพิ่มเข้ามาคือไม่อนุญาตให้ใช้ประเภทผลลัพธ์ที่เป็นคอลเล็กชันแบบ Nullable ใน Room สำหรับ CodeGen ของ Kotlin อีกต่อไป
คำเตือน: คุณอาจพบว่าโปรเจ็กต์ของคุณเข้มงวดมากขึ้นในแง่ของ Nullability เมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความเป็น Null ของอาร์กิวเมนต์ประเภทมีความสําคัญ ในขณะที่ใน Java ส่วนใหญ่จะละเว้น ตัวอย่างเช่น สมมติว่าคุณมีประเภทผลลัพธ์เป็น `Flow<foo\>` และตารางว่างเปล่า ใน CodeGen ของ Java การดำเนินการนี้จะไม่ก่อให้เกิดปัญหาใดๆ แต่คุณจะได้รับข้อผิดพลาดใน CodeGen ของ Kotlin หากต้องการหลีกเลี่ยงปัญหานี้ คุณจะต้องใช้ `Flow<foo?\>` โดยสมมติว่าระบบจะแสดงผล Null </foo?\></foo\>
การเปลี่ยนแปลง API
- ป้องกันการใช้คอลเล็กชันที่อนุญาตค่า Null ในประเภทผลลัพธ์ของเมธอด DAO ที่ไม่มีความหมาย (I777dc, b/253271782, b/259426907)
- เพิ่ม API สำหรับการสร้างโฟลว์ที่ส่งการเปลี่ยนแปลงเครื่องมือติดตามการลบล้าง API นี้มีประโยชน์ในการสร้างสตรีมที่ต้องตอบสนองต่อการเปลี่ยนแปลงฐานข้อมูล (I8c790, b/252899305)
การแก้ไขข้อบกพร่อง
- ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้นามธรรมเป็น DAO getter หรือ DAO query ใน Kotlin codegen แต่ควรเขียนใหม่เป็นฟังก์ชันเพื่อหลีกเลี่ยงความเข้าใจผิดว่าค่าพร็อพเพอร์ตี้เป็นแบบคงที่และมีผลลัพธ์ที่เก็บไว้แบบคงที่ (If6a13, b/127483380, b/257967987)
เวอร์ชัน 2.5.2
เวอร์ชัน 2.5.2
21 มิถุนายน 2023
androidx.room:room-*:2.5.2
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาความเข้ากันไม่ได้กับ kotlinx-metadata-jvm (386d5c)
- แก้ไขปัญหาที่ทำให้ Room แสดงข้อผิดพลาดเมื่อใช้ในการทดสอบ Robolectric (f79bea, b/274924903)
เวอร์ชัน 2.5.1
เวอร์ชัน 2.5.1
22 มีนาคม 2023
androidx.room:room-*:2.5.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- หลีกเลี่ยงการตรวจสอบไดเรกทอรีหลักของฐานข้อมูลใน
FrameworkSQLiteHelper
หากฐานข้อมูลเปิดอยู่ (5de86b8) - ใช้เครื่องหมายถูก
isOpenInternal
เมื่อตรวจสอบว่าฐานข้อมูลเปิดอยู่หรือไม่ (e91fb35) - จัดการเคสที่กลับมาอีกครั้งใน
acquireTransactionThread()
ของRoom
ได้ดีขึ้นแล้ว (219f98b) ในระหว่างธุรกรรมที่หยุดชั่วคราว Room จะใช้เธรดจากโปรแกรมดำเนินการธุรกรรม เริ่มลูปเหตุการณ์ในเธรดดังกล่าว และส่งการดำเนินการฐานข้อมูลที่หยุดชั่วคราวไปยังเธรดดังกล่าวเพื่อให้การดำเนินการทั้งหมดรวมอยู่ในโคโริวทีนของธุรกรรม โดยทั่วไปแล้ว เทรดเธรดจะแตกต่างจากเทรดเธรดที่เริ่มธุรกรรม แต่ในบางกรณีก็อาจเหมือนกัน เพื่อจัดการกับกรณีที่มีการเรียกซ้ำดังกล่าว เราได้ปรับโครงสร้างwithTransaction()
เพื่อไม่ให้ใช้งานควบคุมอีกต่อไป และจะเรียกใช้บล็อกธุรกรรมที่ระงับจากภายในrunBlocking
ในเธรดธุรกรรมแทน
เวอร์ชัน 2.5.0
เวอร์ชัน 2.5.0
22 กุมภาพันธ์ 2023
androidx.room:room-paging-guava:2.5.0
, androidx.room:room-paging-rxjava2:2.5.0
และ androidx.room:room-paging-rxjava3:2.5.0
เผยแพร่แล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้
เวอร์ชัน 2.5.0
11 มกราคม 2023
androidx.room:room-*:2.5.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.4.0
- แหล่งที่มา
room-runtime
ทั้งหมดได้รับการแปลงจาก Java เป็น Kotlin แล้ว โปรดทราบว่าคุณอาจพบปัญหาเกี่ยวกับแหล่งที่มาที่เข้ากันไม่ได้หากโค้ดเป็น Kotlin เนื่องจากการเปลี่ยนคลังเป็น Kotlin ตัวอย่างเช่น การเปลี่ยนแปลงที่ทราบว่าเข้ากันไม่ได้ของแหล่งที่มาคือในInvalidationTracker
ตอนนี้คุณจะต้องประกาศonInvalidate()
ในObserver
เพื่อให้มีพารามิเตอร์ประเภทSet
ไม่ใช่MutableSet
นอกจากนี้ ยังมีการเปลี่ยนเมธอด getter บางรายการเป็นพร็อพเพอร์ตี้ที่ต้องใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ในไฟล์ Kotlin โปรดรายงานข้อบกพร่องหากพบปัญหาการไม่เข้ากันได้ที่สำคัญ - เพิ่มคำอธิบายประกอบทางลัดใหม่
@Upsert
ซึ่งจะพยายามแทรกเอนทิตีเมื่อไม่มีข้อขัดแย้งด้านความเป็นเอกลักษณ์ หรืออัปเดตเอนทิตีหากมีข้อขัดแย้ง (I7aaab, b/241964353) - เราได้เพิ่มรายการใหม่สำหรับการจัดเรียงห้อง
room-paging-rxjava2
,room-paging-rxjava3
และroom-paging-guava
เพื่อรองรับการจัดเรียงห้อง - เพิ่ม API สำหรับระบุชื่อตารางคีย์และค่าเพื่อคลายความกำกวมใน
@MapInfo
(Icc4b5)
เวอร์ชัน 2.5.0-rc01
7 ธันวาคม 2022
androidx.room:room-*:2.5.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-rc01 มีการคอมมิตเหล่านี้
- รุ่นนี้เหมือนกับ
2.5.0-beta02
เวอร์ชัน 2.5.0-beta02
9 พฤศจิกายน 2022
androidx.room:room-*:2.5.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-beta02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- แก้ไข API ต่างๆ ที่ใช้อาร์กิวเมนต์การค้นหาจากแบบคงที่ (
Array<Any?>
) เป็นแบบผันแปร (Array<out Any?>
) เพื่อให้ตรงกับลักษณะการทำงานของอาร์เรย์ของ Java (b/253531073)
เวอร์ชัน 2.5.0-beta01
5 ตุลาคม 2022
androidx.room:room-*:2.5.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- จำกัดเวอร์ชันขั้นต่ำที่รองรับ
@Upsert
เป็น API 16 เนื่องจากไม่สามารถระบุข้อจำกัดของคีย์หลักที่ขัดแย้งกันใน API เวอร์ชันเก่า (I5f67f, b/243039555)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ตารางเงาส่งออกไปยังไฟล์สคีมา
.json
อย่างไม่ถูกต้อง ทำให้ไฟล์เสียหาย (I4f83b, b/246751839)
เวอร์ชัน 2.5.0-alpha03
24 สิงหาคม 2022
androidx.room:room-*:2.5.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มคำอธิบายประกอบทางลัดใหม่
@Upsert
ซึ่งจะพยายามแทรกเอนทิตีเมื่อไม่มีข้อขัดแย้งด้านความเป็นเอกลักษณ์ หรืออัปเดตเอนทิตีหากมีข้อขัดแย้ง (I7aaab, b/241964353)
การแก้ไขข้อบกพร่อง
- ตอนนี้ Room จะแสดง
SQLiteConstraintException
แทนIllegalStateException
ในระหว่างการตรวจสอบข้อจำกัดของคีย์ต่างประเทศในการย้ายข้อมูลอัตโนมัติ (I328dd) - แก้ไขการเปลี่ยนแปลงที่ไม่เข้ากันได้ของแหล่งที่มา Kotlin สำหรับ getter / พร็อพเพอร์ตี้ของ
getOpenHelper
,getQueryExecutor
และgetTransactionExecutor
(Iad0ac)
เวอร์ชัน 2.5.0-alpha02
1 มิถุนายน 2022
androidx.room:room-*:2.5.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- มีการเพิ่มรายการใหม่ใน
room-paging
Artifactroom-paging-rxjava2
,room-paging-rxjava3
และroom-paging-guava
เพื่อรองรับการเรียกห้อง (41a1d4,b/203666906),(eb6098,b/203666906),(1b9ae4,b/203666906)
การเปลี่ยนแปลง API
room-runtime
ทั้งหมดได้รับการแปลงจาก Java เป็น Kotlin แล้ว (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)หมายเหตุ: คุณอาจพบปัญหาเกี่ยวกับแหล่งที่มาที่เข้ากันไม่ได้เนื่องจากการแปลงไลบรารีเป็น Kotlin หากโค้ดของคุณเขียนด้วย Kotlin และเรียกใช้ Room เวอร์ชันเก่า เวอร์ชันใหม่จะต้องจัดการกับกรณีเหล่านี้ ตัวอย่างเช่น การเปลี่ยนแปลงที่ทราบว่าเข้ากันไม่ได้ของแหล่งที่มาคือใน
InvalidationTracker
ตอนนี้คุณจะต้องประกาศonInvalidate()
ในObserver
เพื่อให้มีพารามิเตอร์ประเภทSet
ไม่ใช่MutableSet
- เพิ่ม API สำหรับระบุชื่อตารางคีย์และค่าเพื่อคลายความกำกวมใน
@MapInfo
(Icc4b5) - แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาตให้ใช้
@Ignore
ในตัวรับพร็อพเพอร์ตี้อีกครั้ง (Ifc2fb)
การแก้ไขข้อบกพร่อง
- อัลกอริทึมการแก้ปัญหาคอลัมน์ที่ซ้ำกัน ตอนนี้ Room จะพยายามแก้ไขคอลัมน์ที่คลุมเครือในการค้นหาแบบหลายแผนที่ ซึ่งช่วยให้การรวมกับตารางที่มีตารางชื่อเดียวกันได้รับการแมปกับออบเจ็กต์ข้อมูลผลลัพธ์อย่างถูกต้อง (I4b444, b/201306012, b/212279118)
เวอร์ชัน 2.5.0-alpha01
23 กุมภาพันธ์ 2022
androidx.room:room-*:2.5.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.5.0-alpha01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- แก้ไขปัญหาที่ไม่มีการบังคับใช้การใช้งาน
@IntDef
ของ Room ในแหล่งที่มาของ Kotlin (I75f41, b/217951311) - แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาตให้ใช้
@Query
ในตัวรับพร็อพเพอร์ตี้อีกครั้ง (I0a09b) - แปลง room-common จาก Java เป็น Kotlin (I69c48, b/206858235)
หมายเหตุ: คุณอาจพบปัญหาความเข้ากันไม่ได้ของแหล่งที่มาเนื่องจากมีการย้ายพร็อพเพอร์ตี้บางรายการไปยังออบเจ็กต์ที่ใช้ร่วมกันระหว่างการแปลงไลบรารีเป็น Kotlin หากโค้ดของคุณเป็น Kotlin และเรียกใช้ Room เวอร์ชันเก่า เวอร์ชันใหม่จะต้องมีส่วนต่อท้าย ".Companion" เมื่อเข้าถึงพร็อพเพอร์ตี้เหล่านี้
- แปลงการย้ายข้อมูลห้องจาก Java เป็น Kotlin (I2724b, b/206858622)
- แปลงไฟล์ที่เกี่ยวข้องกับ
paging
ในroom-runtime
จาก Java เป็น Kotlin แล้ว (I82fc8, b/206859668) - เพิ่ม API สําหรับการล็อกและการใช้งานแบบหลายกระบวนการที่ระดับ FrameworkSQLite* เพื่อปกป้องการสร้างและการย้ายข้อมูลฐานข้อมูลที่ดำเนินการครั้งแรกแบบหลายกระบวนการ (Ied267, b/193182592)
การแก้ไขข้อบกพร่อง
- เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในซอร์สโค้ด Kotlin
นี่เป็นการเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยใน Room ซึ่งจะใช้ชื่อฟังก์ชันต้นทางขณะจับคู่กับพร็อพเพอร์ตี้เป็น getter/setter (ก่อนหน้านี้ใช้ชื่อ JVM ของฟังก์ชันซึ่งแตกต่างจากฟังก์ชัน/พร็อพเพอร์ตี้ภายใน)
หากคุณใช้แอตทริบิวต์
@JvmName
ที่กำหนดเองเพื่อจับคู่ตัวรับ/ตัวตั้งค่ากับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจากการอัปเดต (If6531, b/205289020)
เวอร์ชัน 2.4.3
เวอร์ชัน 2.4.3
27 กรกฎาคม 2022
androidx.room:room-*:2.4.3
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.3 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้ Room ไม่รู้จักฟังก์ชันที่ระงับการทำงานใน Kotlin 1.7 (b/236612358)
เวอร์ชัน 2.4.2
เวอร์ชัน 2.4.2
23 กุมภาพันธ์ 2022
androidx.room:room-*:2.4.2
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.2 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการสร้างโค้ดสำหรับฟังก์ชันการระงับ
@Transaction
ของ Dao ที่มีเนื้อหาที่สร้างเมธอดอินเทอร์เฟซเริ่มต้นเนื่องจากการคอมไพล์ด้วย-Xjvm-default=all
หรือเทียบเท่า (Ia4ce5) - การแก้ไขข้อบกพร่องที่ Room สร้างขึ้นโค้ดสําหรับเมธอดการค้นหาประเภทผลลัพธ์
Array<ByteArray>
(If086e, b/213789489)
เวอร์ชัน 2.4.1
เวอร์ชัน 2.4.1
12 มกราคม 2022
androidx.room:room-*:2.4.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในซอร์สโค้ด Kotlin
นี่เป็นการเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยใน Room ซึ่งจะใช้ชื่อฟังก์ชันต้นทางขณะจับคู่กับพร็อพเพอร์ตี้เป็น getter/setter (ก่อนหน้านี้ใช้ชื่อ JVM ของฟังก์ชันซึ่งแตกต่างจากฟังก์ชัน/พร็อพเพอร์ตี้ภายใน)
หากคุณใช้แอตทริบิวต์
@JvmName
ที่กำหนดเองเพื่อจับคู่ตัวรับ/ตัวตั้งค่ากับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจากการอัปเดต (If6531, b/205289020)
เวอร์ชัน 2.4.0
เวอร์ชัน 2.4.0
15 ธันวาคม 2021
androidx.room:room-*:2.4.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.3.0
- การย้ายข้อมูลอัตโนมัติ: ตอนนี้ Room มี API สำหรับสร้างการย้ายข้อมูลโดยอัตโนมัติตราบใดที่มีการส่งออกสคีมา หากต้องการให้ Room ทราบว่าควรสร้างการย้ายข้อมูลอัตโนมัติ ให้ใช้พร็อพเพอร์ตี้ใหม่
@Database#autoMigrations
เพื่อประกาศเวอร์ชันที่จะย้ายข้อมูลจากและไปยังเวอร์ชันใหม่โดยอัตโนมัติ เมื่อ Room ต้องการข้อมูลเพิ่มเติมเกี่ยวกับตารางและการลบหรือเปลี่ยนชื่อคอลัมน์ คำอธิบายประกอบ@AutoMigration
จะประกาศคลาสข้อกำหนดที่มีอินพุตดังกล่าวได้ ดูรายละเอียดเพิ่มเติมในเอกสารประกอบของ@AutoMigration
- Dependency Injection ในการย้ายข้อมูลอัตโนมัติ:
@ProvidedAutoMigrationSpec
เป็น API ใหม่ที่ประกาศว่าจะมีAutoMigrationSpec
ให้ใช้งานขณะรันไทม์ผ่านRoomDatabase.Builder#addAutoMigrationSpec()
ซึ่งช่วยให้เฟรมเวิร์กการฉีดข้อมูล Dependency ระบุข้อกำหนดดังกล่าวได้เมื่อต้องการข้อมูล Dependency ที่ซับซ้อน - การรองรับตัวช่วยการทดสอบการย้ายข้อมูลสำหรับการย้ายข้อมูลอัตโนมัติ:
MigrationTestHelper
ของ Room ได้รับการอัปเดตให้รองรับการย้ายข้อมูลอัตโนมัติด้วยการจัดเตรียม API ตัวสร้างใหม่ซึ่งรับคลาสฐานข้อมูลที่อยู่ระหว่างการทดสอบ ซึ่งจะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติด้วยวิธีเดียวกันโดยอัตโนมัติในระหว่างrunMigrationsAndValidate
- การรองรับการแบ่งหน้าของ Room:
androidx.room:room-paging
เปิดตัวแล้ว ซึ่งรองรับการแบ่งหน้า 3.0 ในตัวสําหรับการค้นหา Room ที่แสดงผลandroidx.paging.PagingSource
- เมธอดการค้นหาเชิงสัมพันธ์: ตอนนี้ Room รองรับเมธอด
@Dao
ประเภทผลลัพธ์แบบ Multimap ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของมัลติแมปที่รองรับ ได้แก่Map
,SparseArray
,LongSparseArray
รวมถึงImmutableMap
,ImmutableSetMultimap
และImmutableListMultimap
ของ Guava
เวอร์ชัน 2.4.0-rc01
1 ธันวาคม 2021
androidx.room:room-*:2.4.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-rc01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- อัปเดต Dependency ของ Room ใน KSP เป็น
1.6.0-1.0.1
เพื่อรองรับ Kotlin 1.6
เวอร์ชัน 2.4.0-beta02
17 พฤศจิกายน 2021
androidx.room:room-*:2.4.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-beta02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เราได้เพิ่มการรองรับ SparseArray และ LongSparseArray ใน @MapInfo (Ic91a2b/138910317)
การแก้ไขข้อบกพร่อง
- เราได้เพิ่มเครื่องมือวิเคราะห์ TypeConverter ใหม่ที่จะพิจารณาข้อมูลเกี่ยวกับ Nullability ในประเภท เนื่องจากข้อมูลนี้พร้อมใช้งานใน KSP เท่านั้น ระบบจึงจะเปิดใช้โดยค่าเริ่มต้นใน KSP เท่านั้น หากการวิเคราะห์นี้ทำให้เกิดปัญหา คุณสามารถปิดได้โดยส่งค่า annotate.useNullAwareTypeAnalysis=false ไปยังโปรแกรมประมวลผลคำอธิบายประกอบ หากเป็นเช่นนั้น โปรดรายงานข้อบกพร่องเนื่องจากเราจะนำการแจ้งว่าไม่เหมาะสมนี้ออกในอนาคต เมื่อใช้เครื่องมือวิเคราะห์ TypeConverter ใหม่นี้ เราขอแนะนำให้ระบุเฉพาะ TypeConverter ฝั่งที่รับซึ่งไม่ใช่ค่า Null เนื่องจากเครื่องมือวิเคราะห์ใหม่สามารถรวม TypeConverter เหล่านี้เข้าด้วยกันด้วยการตรวจสอบค่า Null โปรดทราบว่าการดำเนินการนี้ไม่มีผลกับผู้ใช้ที่ใช้ KAPT หรือ Java เป็นโปรแกรมประมวลผลคำอธิบายประกอบ (ต่างจาก KSP) ซึ่งไม่มีข้อมูลเกี่ยวกับความสามารถในการเป็น Null ของประเภท (Ia88f9, b/193437407)
- แก้ไขข้อบกพร่องที่ทำให้ Room คอมไพล์ไม่สำเร็จพร้อมข้อผิดพลาด SQL เมื่อเอนทิตี FTS ประกาศให้ใช้ตัวแยกวิเคราะห์ ICU (I00db9, b/201753224)
- แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติเกี่ยวกับคอลัมน์ใหม่ที่เพิ่มลงในเอนทิตีที่ฝังระหว่างเวอร์ชัน (I5fcb1b/193798291)
- เราได้แก้ไขปัญหาเกี่ยวกับประเภทผลลัพธ์ของเมธอดการค้นหาเชิงสัมพันธ์ในการค้นหา LEFT JOIN แล้ว การเปลี่ยนแปลงเหล่านี้จะทำให้ในกรณีที่มีการแมปแบบ 1:หลายรายการ คอลเล็กชันที่แสดงผลสำหรับคีย์จะไม่รวมออบเจ็กต์ค่าที่ไม่ถูกต้องหากไม่พบในเคอร์เซอร์ หากไม่พบค่าที่ถูกต้อง ระบบจะแมปคีย์กับคอลเล็กชันว่าง (Id5552b/201946438)
- แก้ปัญหาการย้ายข้อมูลอัตโนมัติที่ไม่สามารถหลีกคีย์เวิร์ด SQLite ในชื่อคอลัมน์ (Idbed4b/197133152)
เวอร์ชัน 2.4.0-beta01
13 ตุลาคม 2021
androidx.room:room-*:2.4.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-beta01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาการย้ายข้อมูลอัตโนมัติที่ไม่เพิ่มคอลัมน์ใหม่เมื่อตารางอื่นในการย้ายข้อมูลอัตโนมัติเดียวกันมีคอลัมน์ใหม่ที่มีชื่อเดียวกันด้วย (Ia5db5, b/200818663)
- การใช้งาน PagingSource ที่สร้างขึ้นโดย room-paging ตอนนี้ใช้
queryExecutor
ที่ส่งผ่านRoomDatabase.Builder
เพื่อให้สามารถลบล้างได้ แทนที่จะเป็นDispatchers.IO
ก่อนหน้านี้ (Iae259)
เวอร์ชัน 2.4.0-alpha05
29 กันยายน 2021
androidx.room:room-*:2.4.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha05 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มเครื่องมือแปลงประเภทในตัวสำหรับ UUID (I671e8, b/73132006)
การเปลี่ยนแปลง API
เพิ่มพร็อพเพอร์ตี้ใหม่ลงในคําอธิบายประกอบ TypeConverters เพื่อให้นักพัฒนาซอฟต์แวร์ปิดใช้เครื่องมือแปลง Enum และ UUID ในตัวได้ โดยค่าเริ่มต้น ตัวแปลงเหล่านี้จะเปิดอยู่ แต่คุณสามารถปิดใช้ตัวแปลงสำหรับขอบเขตหนึ่งๆ หรือทั้งฐานข้อมูลได้ ดูรายละเอียดได้ในเอกสารประกอบของ TypeConverter (36ae9e, b/195413406)
การรองรับคีย์/ค่าที่ไม่ใช่ POJO สำหรับประเภทผลลัพธ์ Multimap ใน DAO ผ่านแอตทริบิวต์
@MapInfo
(I4d704)
@MapInfo
จะจําเป็นเมื่อคอลัมน์คีย์หรือค่าของแผนที่มาจากคอลัมน์เดียว ดูตัวอย่างดังนี้
@MapInfo(valueColumn = "songCount")
@Query("""
SELECT *, COUNT(mSongId) as songCount
FROM Artist JOIN Song ON Artist.artistName = Song.artist
GROUP BY artistName
""")
fun getArtistAndSongCounts(): Map<Artist, Integer>
- กำหนดให้
room-paging
เป็นอาร์ติแฟกต์ที่จำเป็นเมื่อใช้ Paging3 กับ Room (Ieaffe)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ผลการค้นหาของ Multimap ไม่ได้รับการจัดเรียงอย่างถูกต้องเมื่อการค้นหามีคําสั่ง ORDER BY ของคอลัมน์จากคีย์ของแผนที่ (I6b887)
การมีส่วนร่วมจากภายนอก
- เพิ่ม API ใหม่เพื่อระบุลําดับดัชนีใน @Index ขอขอบคุณ Nikita Zhelonkin (I033fc)
เวอร์ชัน 2.4.0-alpha04
21 กรกฎาคม 2021
androidx.room:room-*:2.4.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
ตอนนี้ Room รองรับวิธีการ
@Dao
ประเภทผลลัพธ์แบบ Multimap ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของมัลติแมปที่รองรับคือMap
พร้อมด้วยImmutableMap
,ImmutableSetMultimap
และImmutableListMultimap
ของ Guavaตัวอย่างการค้นหา Multimap มีดังนี้
แผนที่ความสัมพันธ์แบบ 1:1
@Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId") fun getSongAndArtist(): Map<Song, Artist>
แผนที่ความสัมพันธ์แบบ 1: หลายรายการ (มัลติแมปมาตรฐาน)
@Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId") fun getArtistAndAlbums(): Map<Artist, List<Album>>
นอกจากนี้ คุณยังรวมผลลัพธ์ของมัลติแมปไว้ในประเภทผลลัพธ์แบบแอสซิงค์ที่รองรับ เช่น
LiveData
,Observable
ของ Rx หรือFlow
ของโคโริวทีนได้ด้วย
การเรียกบุคคลในห้องพัก
androidx.room:room-paging
เปิดตัวแล้ว โดยรองรับการแบ่งหน้า 3.0 ในตัวสําหรับการค้นหา Room ที่แสดงผลandroidx.paging.PagingSource
@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun loadUsers(): PagingSource<Int, User> }
อาร์ติแฟกต์นี้จะแทนที่การใช้งาน
androidx.paging.PagingSource
ที่ Room สร้างขึ้นด้วยการใช้งานที่สร้างขึ้นบน Paging 3.0 API การใช้งาน PagingSource ใหม่จะแยกวิเคราะห์คีย์ต่างออกไป ดังนั้นคีย์ใดก็ตามที่ระบุให้กับ PagingSource ของ Room ด้วยตนเองจะต้องคำนึงถึงการเปลี่ยนแปลงลักษณะการทำงานนี้ด้วย รวมถึง initialKey ที่ส่งผ่านตัวสร้างของ Pager หน้าเว็บจะเริ่มโหลดจากKey
โดยที่Key
จะเป็นรายการแรกที่โหลด ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งถือว่าLoadParams.Refresh.Key
เป็นตําแหน่งการเลื่อนของผู้ใช้ และโหลดรายการทั้งก่อนและหลังคีย์คุณเลือกใช้รายการนี้หรือไม่ก็ได้ หากเลือกไม่ใช้ ระบบจะกลับไปใช้การรองรับการเรียกข้อมูลหน้าเว็บ 3.0 ที่มีอยู่ซึ่งเปิดตัวใน Room 2.3 อย่างไรก็ตาม รายการนี้จะเป็นรายการที่ต้องระบุในรุ่นต่อๆ ไปสำหรับผู้ที่ใช้ Room ที่มีการแบ่งหน้า 3.0 หากต้องการเลือกใช้ ให้เพิ่มอาร์ติแฟกต์การแบ่งหน้าห้องใหม่ลงในคลาสพาธ หากใช้ Gradle ให้เพิ่มข้อมูลโค้ดต่อไปนี้ลงใน build.gradle
dependency { implementation("androidx.room:room-paging:2.4.0-alpha04") }
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติเกี่ยวกับการละเมิดคีย์ต่างประเทศ (b/190113935)
เวอร์ชัน 2.4.0-alpha03
16 มิถุนายน 2021
androidx.room:room-*:2.4.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- อัปเดต
MigrationTestHelper
ของ Room ให้รองรับการย้ายข้อมูลอัตโนมัติโดยระบุ API ตัวสร้างใหม่ซึ่งรับคลาสฐานข้อมูลที่อยู่ระหว่างการทดสอบ ซึ่งจะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติด้วยวิธีเดียวกันโดยอัตโนมัติในระหว่างrunMigrationsAndValidate
การแก้ไขข้อบกพร่อง
แก้ไขปัญหาเกี่ยวกับไลบรารี SQLite เนทีฟของ Room เพื่อรองรับชิป M1 ของ Apple (b/174695268
แก้ไขปัญหาที่ Room ไม่แสดงข้อผิดพลาดเมื่อประเภทผลลัพธ์ของฟังก์ชัน @Transaction เป็น Flow (I56ddd, b/190075899)
แก้ไขปัญหาการย้ายข้อมูลอัตโนมัติเกี่ยวกับดัชนี b/177673291
การอัปเดตทรัพยากร Dependency
- ตอนนี้การรองรับ KSP ของ Room จะขึ้นอยู่กับ KSP
1.5.10-1.0.0-beta01
(1ecb11, b/160322705)
เวอร์ชัน 2.4.0-alpha02
5 พฤษภาคม 2021
androidx.room:room-*:2.4.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
@ProvidedAutoMigrationSpec
เป็น API ใหม่ที่ประกาศว่าจะมีAutoMigrationSpec
ให้บริการขณะรันไทม์ผ่านRoomDatabase.Builder#addAutoMigrationSpec()
ซึ่งช่วยให้เฟรมเวิร์กการฉีดข้อมูล Dependency ระบุข้อกำหนดดังกล่าวได้เมื่อต้องการข้อมูล Dependency ที่ซับซ้อน
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการย้ายข้อมูลอัตโนมัติที่ระบบไม่สร้าง
@DatabaseView
ขึ้นมาใหม่อย่างถูกต้อง
การมีส่วนร่วมจากภายนอก
- แก้ไขปัญหาใน
JournalMode.TRUNCATE
ของ Room ที่บางครั้งมีการเรียกใช้InvalidationTracker
Callback อย่างไม่ถูกต้อง สายมาช้าเกินไป หรือไม่มาเลย ขอขอบคุณUli Bubenheimer | bubenheimer@users.noreply.github.com
(b/154040286)
เวอร์ชัน 2.4.0-alpha01
21 เมษายน 2021
androidx.room:room-*:2.4.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.4.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การย้ายข้อมูลอัตโนมัติ: ตอนนี้ Room มี API สำหรับสร้างการย้ายข้อมูลโดยอัตโนมัติตราบใดที่มีการส่งออกสคีมา หากต้องการให้ Room ทราบว่าควรสร้างการย้ายข้อมูลอัตโนมัติ ให้ใช้พร็อพเพอร์ตี้ใหม่
@Database#autoMigrations
เพื่อประกาศเวอร์ชันที่จะย้ายข้อมูลจากและไปยังเวอร์ชันใหม่โดยอัตโนมัติ เมื่อ Room ต้องการข้อมูลเพิ่มเติมเกี่ยวกับตารางและการลบหรือเปลี่ยนชื่อคอลัมน์ คำอธิบายประกอบ@AutoMigration
จะประกาศคลาสข้อกำหนดที่มีอินพุตดังกล่าวได้ ดูรายละเอียดเพิ่มเติมในเอกสารประกอบของ@AutoMigration
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
defaultValue
ที่มีวงเล็บปีกกาเกินได้รับการตรวจสอบอย่างไม่ถูกต้องโดยการตรวจสอบสคีมาของ Room b/182284899
เวอร์ชัน 2.3.0
เวอร์ชัน 2.3.0
21 เมษายน 2021
androidx.room:room-*:2.3.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.2.0
- การรองรับ Enum ในตัว: ตอนนี้ Room จะใช้ตัวแปลงประเภท Enum เป็นสตริงและในทางกลับกันโดยค่าเริ่มต้นหากไม่ได้ระบุไว้ หากตัวแปลงประเภทสำหรับ Enum มีอยู่แล้ว Room จะให้ความสำคัญกับการใช้ตัวแปลงประเภทนั้นมากกว่าตัวแปลงประเภทเริ่มต้น
- การเรียกกลับของคําค้นหา: ตอนนี้ Room มี API การเรียกกลับทั่วไป RoomDatabase.QueryCallback สำหรับเวลาที่ระบบกำลังจะเรียกใช้การค้นหา ซึ่งจะมีประโยชน์สำหรับการบันทึกในบิลด์แก้ไขข้อบกพร่อง คุณสามารถตั้งค่าการโทรกลับผ่าน
RoomDatabase.Builder#setQueryCallback()
- การปรับปรุงที่รวมไว้ล่วงหน้า: ตอนนี้ Room มี API สำหรับการสร้างฐานข้อมูลโดยใช้ฐานข้อมูลที่รวมไว้ล่วงหน้าซึ่งอ่านจากสตรีมอินพุต ซึ่งจะรองรับกรณีที่ฐานข้อมูลที่บรรจุไว้ล่วงหน้าเป็นไฟล์ GZIP
- ตัวแปลงประเภทที่ระบุ: ตอนนี้ Room มี API สำหรับระบุอินสแตนซ์ของตัวแปลงประเภทเพื่อให้แอปควบคุมการเริ่มต้นใช้งานได้ หากต้องการทําเครื่องหมายตัวแปลงประเภทที่จะส่งไปยัง Room ให้ใช้คําอธิบายประกอบใหม่ @ProvidedTypeConverter
- การรองรับ RxJava3: ตอนนี้ Room รองรับประเภท RxJava3 แล้ว คุณสามารถประกาศเมธอด DAO ที่มีประเภทผลลัพธ์เป็น Flowable, Single, Maybe และ Completable ได้เช่นเดียวกับ RxJava2 นอกจากนี้ ยังมีอาร์ติแฟกต์
androidx.room:room-rxjava3
ใหม่เพื่อรองรับ RxJava3 - การรองรับการแบ่งหน้า 3.0: ตอนนี้ Room จะรองรับการสร้างการใช้งานสําหรับเมธอดที่มีคําอธิบายประกอบ
@Query
ซึ่งประเภทผลลัพธ์คือandroidx.paging.PagingSource
เวอร์ชัน 2.3.0-rc01
24 มีนาคม 2021
androidx.room:room-*:2.3.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ทำให้ใช้การค้นหา Coroutine Flow ที่ Room สร้างขึ้นในบล็อก
withTransaction
ที่ระงับไม่ได้ (I797bf)
เวอร์ชัน 2.3.0-beta03
10 มีนาคม 2021
androidx.room:room-*:2.3.0-beta03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-beta03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการรองรับการคอมไพล์แบบเพิ่มทีละขั้นสำหรับ KSP (I031c1, b/176453350)
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่การสร้าง PagingSource ในเทรดหลักอาจทริกเกอร์ ANR (I42b74, b/181221318)
- แก้ไขระดับการแชร์ของ
@ExperimentalRoomApi
เป็นสาธารณะแทนที่จะเป็นแพ็กเกจส่วนตัว (b/181356119)
การมีส่วนร่วมจากภายนอก
- อนุญาตให้ Room ยอมรับประเภทผลลัพธ์ POJO ในเมธอด DAO ที่มีการกำกับหมายด้วย
@Query
เมื่อมีการกำกับหมายด้วย@SkipQueryVerification
ด้วย Room จะพยายามอย่างเต็มที่เพื่อแปลงผลลัพธ์ของการค้นหาเป็นประเภทผลลัพธ์ POJO ในลักษณะเดียวกับที่ดำเนินการกับ@RawQuery
เมธอด DAO ที่มีคำอธิบายประกอบ ขอขอบคุณ "Markus Riegel | hey@marcorei.com" (I45acb)
เวอร์ชัน 2.3.0-beta02
18 กุมภาพันธ์ 2021
androidx.room:room-*:2.3.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-beta02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
ตอนนี้ Room รองรับการประมวลผลสัญลักษณ์ Kotlin KSP แบบทดลองแล้ว
KSP เป็นตัวแทน KAPT เพื่อเรียกใช้โปรแกรมประมวลผลคำอธิบายประกอบในคอมไพเลอร์ Kotlin โดยตรง ซึ่งจะช่วยลดเวลาในการบิลด์ได้อย่างมาก
หากต้องการใช้ Room กับ KSP คุณสามารถใช้ปลั๊กอิน KSP Gradle และแทนที่การกําหนดค่า
kapt
ในไฟล์บิลด์ด้วยksp
เช่น ใช้ksp 'androidx.room:room-compiler:2.3.0-beta02'
แทนkapt 'androidx.room:room-compiler:2.3.0-beta02'
ดูรายละเอียดเพิ่มเติมในเอกสารประกอบ KSPโปรดทราบว่า KSP ยังอยู่ระหว่างการทดสอบ เราจึงขอแนะนำให้ใช้ KAPT สำหรับโค้ดเวอร์ชันที่ใช้งานจริง การลดเวลาสร้างใช้ได้ก็ต่อเมื่อไม่มีตัวประมวลผลอื่นๆ ที่ใช้ KAPT ดูปัญหาที่ทราบได้ที่ b/160322705
เวอร์ชัน 2.3.0-beta01
27 มกราคม 2021
androidx.room:room-*:2.3.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-beta01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ฐานข้อมูลที่ปิดอัตโนมัติ: ตอนนี้ Room สามารถปิดฐานข้อมูลที่ไม่มีการเข้าถึงหลังจากผ่านไปตามระยะเวลาที่กำหนด ฟีเจอร์นี้เป็นฟีเจอร์ทดลองและสามารถเปิดใช้ได้โดยการเรียกใช้
RoomDatabase.Builder#setAutoCloseTimeout()
ฟีเจอร์นี้มีประโยชน์สําหรับแอปพลิเคชันที่มีฐานข้อมูลหลายแห่ง
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่เมธอด Dao ที่มีเมธอด
@Update
หรือ@Delete
หลายรายการที่มีกลยุทธ์การขัดแย้งกันจะสร้างโค้ดที่มีกลยุทธ์เพียงกลยุทธ์เดียว ซึ่งจะละเว้นกลยุทธ์ที่กําหนดไว้ (/I0b90d, b/176138543)
เวอร์ชัน 2.3.0-alpha04
16 ธันวาคม 2020
androidx.room:room-*:2.3.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ Room มี API การเรียกกลับทั่วไป
RoomDatabase.QueryCallback
สำหรับเวลาที่คำค้นหากำลังจะดำเนินการ ซึ่งจะมีประโยชน์สำหรับการบันทึกในบิลด์แก้ไขข้อบกพร่อง คุณสามารถตั้งค่าการโทรกลับผ่านRoomDatabase.Builder#setQueryCallback()
(Iaa513, b/174478034, b/74877608) - ตอนนี้ Room จะใช้ตัวแปลงประเภท Enum เป็นสตริงและในทางกลับกันโดยค่าเริ่มต้นหากไม่ได้ระบุไว้ หากตัวแปลงประเภทสำหรับ Enum มีอยู่แล้ว Room จะให้ความสำคัญกับการใช้ตัวแปลงประเภทนั้นมากกว่าตัวแปลงประเภทเริ่มต้น (b/73132006)
ปัญหาที่ทราบ
- หากมีตัวแปลงประเภทแบบ 1 ทิศทางสําหรับการอ่านอยู่แล้วสําหรับ Enum นั้น Room อาจใช้ตัวแปลงสตริงเป็น Enum ในตัวโดยไม่ได้ตั้งใจ ซึ่งอาจไม่ต้องการ นี่เป็นปัญหาที่ทราบอยู่แล้วและสามารถแก้ไขได้โดยการเปลี่ยนเป็นเครื่องมือแปลงแบบ 2 ทาง ดูที่ b/175707691
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room จะปิดใช้การประมวลผลคำอธิบายประกอบแบบเพิ่มใน JDK เวอร์ชันใหม่อย่างไม่ถูกต้อง (b/171387388)
- แก้ไขปัญหาเกี่ยวกับ Room ที่พบคลาสที่สร้างขึ้นเมื่อมีการใช้ตัวโหลดคลาสหลายรายการ ขอขอบคุณที่แก้ไข ‘Serendipity | 892449346@qq.com’ (b/170141113)
- แก้ไขปัญหาที่ Room จะสร้างโค้ดที่ไม่ถูกต้องเมื่อ
@Dao
ของ Kotlin มีคลาสฐานที่เป็นแบบทั่วไปซึ่งอยู่ใน JVM (b/160258066)
การมีส่วนร่วมจากภายนอก
- ตอนนี้ Room จะเริ่มต้นด้วยการใช้
beginTransactionNonExclusive
หากเปิดใช้โหมด WAL และ API เป็น 16 ขึ้นไป ขอขอบคุณ "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)
เวอร์ชัน 2.3.0-alpha03
14 ตุลาคม 2020
androidx.room:room-*:2.3.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
ตอนนี้ Room มี API สำหรับระบุอินสแตนซ์ของเครื่องมือแปลงประเภทเพื่อให้แอปควบคุมการเริ่มต้นได้ หากต้องการทําเครื่องหมายตัวแปลงประเภทที่จะส่งไปยัง Room ให้ใช้คําอธิบายประกอบใหม่
@ProvidedTypeConverter
ขอขอบคุณ "mzgreen yairobbe@gmail.com" (Ie4fa5, b/121067210)ตอนนี้ Room มี API สำหรับการสร้างฐานข้อมูลโดยใช้ฐานข้อมูลที่แพ็กเกจไว้ล่วงหน้าซึ่งอ่านจากสตรีมอินพุต ซึ่งจะรองรับกรณีที่ฐานข้อมูลที่บรรจุไว้ล่วงหน้าเป็นไฟล์ GZIP ขอขอบคุณ ‘Ahmed El-Helw ahmedre@gmail.com’ (3e6792, b/146911060)
การเปลี่ยนแปลง API
เพิ่มเป้าหมายที่ขาดหายไปลงในคําอธิบายประกอบ
@ForeignKey
ซึ่งป้องกันไม่ให้มีการใช้เป้าหมายนั้นนอกคําอธิบายประกอบ@Entity
(Iced1e)ฟิลด์
mCallbacks
ในRoomDatabase.java
ซ่อนอยู่ (d576cb, b/76109329)
การแก้ไขข้อบกพร่อง
อัปเดตเอกสารประกอบของ TypeConverters เพื่อชี้แจงว่า TypeConverters ใช้เพื่อแปลงคอลัมน์ / ฟิลด์เท่านั้น ไม่สามารถแปลงแถวได้ (I07c56, b/77307836)
อัปเดต DaoProcessor เพื่อแก้ไขข้อผิดพลาดคอมไพเลอร์ใน Dao ที่มีซุปเปอร์ไทป์ทั่วไปที่มี "พรอมิเตอ" ของ Kotlin (Ice6bb, b/160258066)
อัปเดตเอกสารประกอบเกี่ยวกับเมธอดเพิ่ม/นำออบเซอร์เวอร์ออกเพื่อชี้แจงการแยกชุดข้อความ (Ifd1d9, b/153948821)
แก้ไขปัญหาที่ Room ตรวจสอบตาราง FTS ที่ประกาศคอลัมน์ rowid ไม่ถูกต้อง (d62ebc, b/145858914)
การมีส่วนร่วมจากภายนอก
แก้ไขปัญหาเกี่ยวกับภาษาตุรกี (5746e3) b/68159494
แทนที่
ConcurrentHashMap
ภายในRoomDatabase
ด้วยCollections.synchronizedMap()
เพื่อหลีกเลี่ยงปัญหาใน Android Lollipop (d1cfc7, b/162431855)เพิ่มการเรียกกลับ onOpenPrepackagedDatabase เมื่อคัดลอก DB ที่บรรจุไว้ล่วงหน้า (I1ba74, b/148934423)
เวอร์ชัน 2.3.0-alpha02
22 กรกฎาคม 2020
androidx.room:room-*:2.3.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- การรองรับ RxJava3: ตอนนี้ Room รองรับประเภท RxJava3 แล้ว คุณสามารถประกาศเมธอด DAO ที่มีประเภทผลลัพธ์เป็น Flowable, Single, Maybe และ Completable ได้เช่นเดียวกับ RxJava2 นอกจากนี้ ยังมีอาร์ติแฟกต์
androidx.room:room-rxjava3
ใหม่เพื่อรองรับ RxJava3 (b/152427884)
การเปลี่ยนแปลง API
- ขณะนี้ระบบรองรับการประกาศ
@TypeConverter
ในคลาสออบเจ็กต์ Kotlin แล้ว (b/151110764) Room
ตัวเลือกการประมวลผลคำอธิบายประกอบแบบเพิ่มจะเปิดอยู่โดยค่าเริ่มต้น (b/112110217)
เวอร์ชัน 2.3.0-alpha01
10 มิถุนายน 2020
androidx.room:room-*:2.3.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 2.3.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
การรองรับการแบ่งหน้า 3.0: ตอนนี้ Room จะรองรับการสร้างการใช้งานสำหรับ
@Query
เมธอดที่มีคำอธิบายประกอบซึ่งมีประเภทผลลัพธ์เป็นandroidx.paging.PagingSource
@Dao interface UserDao { @Query("SELECT * FROM users ORDER BY id ASC") fun pagingSource(): PagingSource<Int, User> }
การเปลี่ยนแปลง API
@RewriteQueriesToDropUnusedColumns
คือการกำกับเนื้อหาใหม่ที่สะดวกซึ่งทําให้ Room เขียนการฉายภาพ "*" ใหม่ในการค้นหาเพื่อนำคอลัมน์ที่ไม่ได้ใช้ในผลลัพธ์ออก- ตัวเลือกโปรเซสเซอร์
room.expandProjection
เลิกใช้งานแล้ว ใช้@RewriteQueriesToDropUnusedColumns
แทนคำค้นหาการเพิ่มประสิทธิภาพห้องด้วยการแสดงผลด้วยดาว โปรดทราบว่า@RewriteQueriesToDropUnusedColumns
ไม่ได้ใช้แทนวิธีแก้ปัญหาความขัดแย้งของคอลัมน์room.expandProjection
ที่เสนอสำหรับประเภทผลลัพธ์ที่มีฟิลด์@Embedded
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room ตรวจหาเวอร์ชัน JDK ที่ใช้เพื่อเปิดใช้โปรแกรมประมวลผลคำอธิบายประกอบแบบเพิ่มทีละรายการไม่ถูกต้อง ขอขอบคุณ Blaz Solar (me@blaz.solar) (b/155215201)
- ตอนนี้ Room จะฝัง ANTLR ที่ต้องการใช้กับโปรแกรมประมวลผลคำอธิบายประกอบเพื่อหลีกเลี่ยงข้อขัดแย้งของเวอร์ชันกับโปรแกรมประมวลผลอื่นๆ ที่ใช้ ANTLR ด้วย (b/150106190)
เวอร์ชัน 2.2.6
เวอร์ชัน 2.2.6
16 ธันวาคม 2020
androidx.room:room-*:2.2.6
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.6 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Room จะปิดใช้การประมวลผลคำอธิบายประกอบแบบเพิ่มใน JDK เวอร์ชันใหม่อย่างไม่ถูกต้อง (b/171387388)
เวอร์ชัน 2.2.5
เวอร์ชัน 2.2.5
18 มีนาคม 2020
androidx.room:room-*:2.2.5
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.5 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- กำหนดให้
MultiInstanceInvalidationService
เป็น directBootAware ขอขอบคุณ "Mygod contact-git@mygod.be" (b/148240967) - แก้ไขข้อบกพร่องที่ทําให้ระบบขัดข้องเมื่อเปิดใช้การลบล้างอินสแตนซ์หลายรายการและฐานข้อมูลมีเอนทิตี FTS (b/148969394)
- แก้ไขปัญหาเมื่อโหลดไลบรารีแบบเนทีฟของ SQLite ในโปรแกรมประมวลผลคำอธิบายประกอบของ Room ซึ่งจะทำให้คอมไพเลอร์ขัดข้องเนื่องจากการคอมไพล์แบบขนาน (b/146217083)
เวอร์ชัน 2.2.4
เวอร์ชัน 2.2.4
19 กุมภาพันธ์ 2020
ปล่อย androidx.room:room-common:2.2.4
, androidx.room:room-compiler:2.2.4
, androidx.room:room-guava:2.2.4
, androidx.room:room-ktx:2.2.4
, androidx.room:room-migration:2.2.4
, androidx.room:room-runtime:2.2.4
, androidx.room:room-rxjava2:2.2.4
และ androidx.room:room-testing:2.2.4
เวอร์ชัน 2.2.4 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับการระงับธุรกรรมที่อาจเกิดข้อขัดข้องหากมีการยกเลิก coroutine อย่างรวดเร็วก่อนที่ธุรกรรมจะเริ่มขึ้นจริง (b/148181325)
- แก้ปัญหาการใช้ @Generated อย่างไม่ถูกต้องเมื่อสร้างด้วย JDK 9 (b/146538330)
- แก้ไขปัญหาที่ Room จะสร้างโค้ดที่ไม่ถูกต้องเมื่ออินเทอร์เฟซ DAO ใน Kotlin มีฟังก์ชันที่เฉพาะเจาะจง (b/146825845)
เวอร์ชัน 2.2.3
เวอร์ชัน 2.2.3
18 ธันวาคม 2019
androidx.room:room-*:2.2.3
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.3 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room ตรวจสอบฐานข้อมูลที่ไม่เคยมีการย้ายข้อมูลและมีแฮชเดิมที่มีดัชนีในสคีมาไม่สำเร็จ (b/139306173)
เวอร์ชัน 2.2.2
เวอร์ชัน 2.2.2
20 พฤศจิกายน 2019
androidx.room:room-*:2.2.2
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.2 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่การเก็บรวบรวมความสัมพันธ์แบบ 1:1 ที่มีแถวมากกว่า 999 แถวจะทำให้ Room แสดงผลรายการที่เกี่ยวข้องเป็น Null (b/143105450)
เวอร์ชัน 2.2.1
เวอร์ชัน 2.2.1
23 ตุลาคม 2019
androidx.room:room-*:2.2.1
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.1 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จะเตือนอย่างไม่ถูกต้องเกี่ยวกับ
CURSOR_MISMATCH
เมื่อเปิดตัวเลือกคอมไพเลอร์expandProjection
(b/140759491) - เพิ่มกลไกการลองอีกครั้งเพื่อจัดการกับไลบรารีเนทีฟที่ขาดหายไปซึ่งใช้เพื่อยืนยันการค้นหาระหว่างเวลาคอมไพล์
เวอร์ชัน 2.2.0
เวอร์ชัน 2.2.0
9 ตุลาคม 2019
androidx.room:room-*:2.2.0
ได้รับการปล่อยแล้ว เวอร์ชัน 2.2.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.1.0
- ฐานข้อมูลที่บรรจุไว้ล่วงหน้า: ตอนนี้ API 2 รายการใหม่ใน
RoomDatabase.Builder
พร้อมใช้งานในการสร้างRoomDatabase
จากไฟล์ฐานข้อมูลที่ป้อนข้อมูลไว้แล้วcreateFromAsset()
สำหรับกรณีที่ไฟล์ฐานข้อมูลที่ป้อนข้อมูลล่วงหน้าอยู่ในโฟลเดอร์ assets ของ APK ส่วนcreateFromFile()
สำหรับกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้ API เหล่านี้จะเปลี่ยนลักษณะการทํางานของการย้ายข้อมูลที่ลบข้อมูลออก เช่น ในระหว่างการย้ายข้อมูลสำรอง Room จะพยายามคัดลอกฐานข้อมูลที่สร้างขึ้นล่วงหน้าอีกครั้ง (หากมี) ไม่เช่นนั้นก็จะเปลี่ยนไปใช้การลบและสร้างตารางทั้งหมดใหม่ b/62185732 - ค่าเริ่มต้นของสคีมา: ตอนนี้
@ColumnInfo
มีพร็อพเพอร์ตี้ใหม่defaultValue
ที่สามารถใช้เพื่อระบุค่าเริ่มต้นของคอลัมน์ ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูลและจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากระบุไว้ b/64088772 - ความสัมพันธ์แบบหลายต่อหลาย: ตอนนี้
@Relation
มีพร็อพเพอร์ตี้ใหม่associateBy
ซึ่งรับคําอธิบายประกอบใหม่@Junction
ที่ใช้เพื่อประกาศความสัมพันธ์ที่จําเป็นต้องได้รับการตอบสนองผ่านตารางเชื่อมต่อ (หรือที่เรียกว่าตารางการเข้าร่วม) b/69201917 - ความสัมพันธ์แบบ 1:1: ยกเลิกข้อจำกัดในช่อง POJO ที่มีคำอธิบายประกอบด้วย
@Relation
ต้องเป็นประเภทList
หรือSet
ซึ่งทำให้แสดงความสัมพันธ์แบบค่าเดี่ยวได้b/62905145 - เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO
@Insert
,@Update
และ@Delete
มีพร็อพเพอร์ตี้ใหม่targetEntity
ซึ่งช่วยให้ระบุตารางเป้าหมายที่เมธอด DAO ควรจะดำเนินการได้ ซึ่งช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งระบบจะตีความว่าเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตการแทรก ลบ และอัปเดตเพียงบางส่วน b/127549506 - Coroutines Flow: ตอนนี้เมธอด
@Query
DAO จะเป็นประเภทผลลัพธ์Flow<T>
ได้แล้ว ฟีดข้อมูลที่แสดงผลจะส่งชุดค่าใหม่อีกครั้งหากตารางที่สังเกตในคําค้นหาเป็นโมฆะ การประกาศฟังก์ชัน DAO ที่มีประเภทผลลัพธ์เป็นChannel<T>
เป็นข้อผิดพลาด Room แนะนำให้คุณใช้Flow
แล้วใช้ฟังก์ชันใกล้เคียงเพื่อแปลงFlow
เป็นChannel
แทน b/130428884 - ตัวประมวลผลคําอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นตัวประมวลผลคําอธิบายประกอบแบบแยกของ Gradle และสามารถเปิดใช้การเพิ่มได้ผ่านตัวเลือกตัวประมวลผล
room.incremental
ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือกเครื่องมือคอมไพล์ห้อง หากพบปัญหาใดๆ โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การเพิ่มจำนวนโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต b/112110217 - การขยายการฉายภาพ: เพิ่มตัวเลือกคอมไพเลอร์ใหม่สำหรับทดลองใช้
room.expandProjection
ซึ่งทําให้ Room เขียนคําค้นหาใหม่ด้วยการฉายภาพสตาร์เพื่อให้มีเฉพาะคอลัมน์ใน POJO ประเภทที่แสดงผล เช่น สําหรับเมธอด DAO ที่มี@Query("SELECT * FROM Song")
ซึ่งแสดงผลลัพธ์ POJO ชื่อSongIdAndTitle
ที่มีเพียง 2 ช่อง จากนั้น Room จะเขียนการค้นหาใหม่เป็นSELECT id, title FROM Song
เพื่อให้ดึงชุดคอลัมน์ขั้นต่ำที่ตรงกับประเภทผลลัพธ์ ซึ่งจะช่วยลดCURSOR_MISMATCH
คำเตือนที่แสดงขึ้นเมื่อการค้นหาแสดงคอลัมน์เพิ่มเติมที่ไม่ตรงกับช่องใดๆ ในประเภท POJO ที่แสดง
เวอร์ชัน 2.2.0-rc01
5 กันยายน 2019
androidx.room:room:2.2.0-rc01
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ไม่มีการเปลี่ยนแปลงที่เผยแพร่ต่อสาธารณะนับตั้งแต่ห้อง 2.2.0-beta01
เวอร์ชัน 2.2.0-beta01
22 สิงหาคม 2019
androidx.room:room-*:2.2.0-beta01
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
แก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่การค้นหา Coroutine Flow จะหยุดส่งค่าใหม่อีกครั้งหลังจากผ่านไประยะหนึ่ง (b/139175786)
- แก้ไขข้อบกพร่องที่ Room ไม่ยอมรับรหัสแฮชสคีมาเดิมขณะเปิดฐานข้อมูลที่ยังไม่ได้ย้ายข้อมูลตั้งแต่ Room 1.0 ซึ่งทําให้รันไทม์ขัดข้องเนื่องจากสคีมาไม่ถูกต้อง (b/139306173)
เวอร์ชัน 2.2.0-alpha02
7 สิงหาคม 2019
androidx.room:room-*:2.2.0-alpha02
ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- Coroutines Flow: ตอนนี้เมธอด
@Query
DAO จะเป็นประเภทผลลัพธ์Flow<T>
ได้แล้ว ฟีดข้อมูลที่แสดงผลจะส่งชุดค่าใหม่อีกครั้งหากตารางที่สังเกตในคําค้นหาเป็นโมฆะ การประกาศฟังก์ชัน DAO ที่มีประเภทผลลัพธ์เป็นChannel<T>
เป็นข้อผิดพลาด Room แนะนำให้คุณใช้Flow
แล้วใช้ฟังก์ชันใกล้เคียงเพื่อแปลงFlow
เป็นChannel
แทน b/130428884 - การขยายการฉายภาพ: เพิ่มตัวเลือกคอมไพเลอร์ใหม่สำหรับทดลองใช้
room.expandProjection
ซึ่งทําให้ Room เขียนคําค้นหาใหม่ด้วยการฉายภาพสตาร์เพื่อให้มีเฉพาะคอลัมน์ใน POJO ประเภทที่แสดงผล เช่น สําหรับเมธอด DAO ที่มี@Query("SELECT * FROM Song")
ซึ่งแสดงผลลัพธ์ POJO ชื่อSongIdAndTitle
ที่มีเพียง 2 ช่อง จากนั้น Room จะเขียนการค้นหาใหม่เป็นSELECT id, title FROM Song
เพื่อให้ดึงชุดคอลัมน์ขั้นต่ำที่ตรงกับประเภทผลลัพธ์ ซึ่งจะช่วยลดCURSOR_MISMATCH
คำเตือนที่แสดงขึ้นเมื่อการค้นหาแสดงคอลัมน์เพิ่มเติมที่ไม่ตรงกับช่องใดๆ ในประเภท POJO ที่แสดง onDestructiveMigrate
เป็น API การเรียกกลับใหม่ที่เพิ่มลงในRoomDatabase.Callback
สำหรับกรณีที่ Room ย้ายข้อมูลฐานข้อมูลแบบทำลายข้อมูล b/79962330
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องโดยใช้เมธอดเป็นฟิลด์ b/136194628
- แก้ไขข้อบกพร่องที่ทำให้ InvalidationTracker แสดง NPE ในกระบวนการที่ 2 เมื่อเปิดใช้การลบล้างอินสแตนซ์หลายรายการและบริการการลบล้างถูกหยุดทำงาน b/137454915
- แก้ไขข้อบกพร่องที่ Room ระบุประเภทผลลัพธ์ของฟังก์ชันที่ระงับซึ่งรับช่วงมาและกำกับเนื้อหาด้วย
@RawQuery
อย่างไม่ถูกต้อง b/137878827 - อัปเดตโค้ดที่สร้างขึ้นสำหรับ
@Relation
เมื่อคีย์ที่เกี่ยวข้องเป็นประเภท BLOB เพื่อใช้ByteBuffer
ที่เปรียบเทียบได้ b/137881998 - แก้ไขข้อบกพร่องที่ Room จะบ่นว่าไม่มีตัวตั้งค่าใน POJO ที่ใช้เป็นพารามิเตอร์เอนทิตีบางส่วนของ
@Insert
,@Update
และ@Delete
b/138664463 - แก้ไขข้อบกพร่องที่ Room จะบ่นว่าไม่มี getter และ setter สําหรับคอลัมน์ที่ละเว้นผ่าน
@Entity
เมื่อใช้คลาสเอนทิตีในเมธอด DAO บางรายการ b/138238182 - แก้ไขข้อบกพร่องที่ Room แปลงอาร์กิวเมนต์การเชื่อมโยงที่มีชื่อเป็นอาร์กิวเมนต์ตำแหน่งอย่างไม่ถูกต้อง ซึ่งทำให้เกิดข้อยกเว้นรันไทม์เมื่อดำเนินการค้นหาด้วยพารามิเตอร์ที่ใช้ซ้ำ b/137254857
เวอร์ชัน 2.2.0-alpha01
10 กรกฎาคม 2019
ฟีเจอร์ใหม่
- ฐานข้อมูลที่บรรจุไว้ล่วงหน้า: ตอนนี้ API 2 รายการใหม่ใน
RoomDatabase.Builder
พร้อมใช้งานในการสร้างRoomDatabase
จากไฟล์ฐานข้อมูลที่ป้อนข้อมูลไว้แล้วcreateFromAsset()
สำหรับกรณีที่ไฟล์ฐานข้อมูลที่ป้อนข้อมูลล่วงหน้าอยู่ในโฟลเดอร์ assets ของ APK ส่วนcreateFromFile()
สำหรับกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้ API เหล่านี้จะเปลี่ยนลักษณะการทํางานของการย้ายข้อมูลที่ลบข้อมูลออก เช่น ในระหว่างการย้ายข้อมูลสำรอง Room จะพยายามคัดลอกฐานข้อมูลที่สร้างขึ้นล่วงหน้าอีกครั้ง (หากมี) ไม่เช่นนั้นก็จะเปลี่ยนไปใช้การลบและสร้างตารางทั้งหมดใหม่ b/62185732 - ค่าเริ่มต้นของสคีมา: ตอนนี้
@ColumnInfo
มีพร็อพเพอร์ตี้ใหม่defaultValue
ที่สามารถใช้เพื่อระบุค่าเริ่มต้นของคอลัมน์ ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูลและจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากระบุไว้ b/64088772หมายเหตุ: หากสคีมาฐานข้อมูลมีค่าเริ่มต้นอยู่แล้ว เช่น ค่าที่เพิ่มผ่าน
ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z
และคุณตัดสินใจที่จะกำหนดค่าเริ่มต้นผ่าน@ColumnInfo
ลงในคอลัมน์เดียวกัน คุณอาจต้องทำการย้ายข้อมูลเพื่อตรวจสอบค่าเริ่มต้นที่ไม่ได้นำมาพิจารณา ดูข้อมูลเพิ่มเติมได้ที่การย้ายข้อมูลห้องพัก - ความสัมพันธ์แบบหลายต่อหลาย: ตอนนี้
@Relation
มีพร็อพเพอร์ตี้ใหม่associateBy
ซึ่งรับคําอธิบายประกอบใหม่@Junction
ที่ใช้เพื่อประกาศความสัมพันธ์ที่จําเป็นต้องได้รับการตอบสนองผ่านตารางเชื่อมต่อ (หรือที่เรียกว่าตารางการเข้าร่วม) b/69201917 - ความสัมพันธ์แบบ 1:1: ยกเลิกข้อจำกัดในช่อง POJO ที่มีคำอธิบายประกอบด้วย
@Relation
ต้องเป็นประเภทList
หรือSet
ซึ่งทำให้แสดงความสัมพันธ์แบบค่าเดี่ยวได้b/62905145 - เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO
@Insert
,@Update
และ@Delete
มีพร็อพเพอร์ตี้ใหม่targetEntity
ซึ่งช่วยให้ระบุตารางเป้าหมายที่เมธอด DAO ควรจะดำเนินการได้ ซึ่งช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งระบบจะตีความว่าเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตการแทรก ลบ และอัปเดตเพียงบางส่วน b/127549506 - ตัวประมวลผลคําอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นตัวประมวลผลคําอธิบายประกอบแบบแยกของ Gradle และสามารถเปิดใช้การเพิ่มได้ผ่านตัวเลือกตัวประมวลผล
room.incremental
ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือกเครื่องมือคอมไพล์ห้อง หากพบปัญหาใดๆ โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การเพิ่มจำนวนโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต b/112110217
การแก้ไขข้อบกพร่อง
- Room จะไม่ส่งต่อ
EmptySetResultException
ไปยังตัวแฮนเดิลข้อผิดพลาดส่วนกลางอีกต่อไปเมื่อสตรีม Rx ของคําค้นหาถูกทิ้งไปก่อนที่จะดําเนินการค้นหาเสร็จสิ้น b/130257475 - แก้ไขข้อบกพร่องที่ Room จะแสดงข้อความแสดงข้อผิดพลาดที่ไม่ถูกต้องเมื่อฟังก์ชัน DAO แบบระงับที่มีคำอธิบายประกอบด้วย
@RawQuery
ไม่มีประเภทผลลัพธ์ b/134303897 - Room จะไม่สร้างอะแดปเตอร์ DAO ที่มีประเภทข้อมูลดิบอีกต่อไป b/135747255
เวอร์ชัน 2.1.0
เวอร์ชัน 2.1.0
13 มิถุนายน 2019
Room 2.1.0 เปิดตัวโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01
ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 2.0.0
- FTS: ตอนนี้ Room รองรับเอนทิตีที่มีการแมปตาราง FTS3 หรือ FTS4 แล้ว ตอนนี้ชั้นเรียนที่มีคำอธิบายประกอบ
@Entity
สามารถใส่คำอธิบายประกอบเพิ่มเติมด้วย@Fts3
หรือ@Fts4
เพื่อประกาศชั้นเรียนที่มีตารางการค้นหาข้อความทั้งหมดที่มีการแมปได้แล้ว ตัวเลือก FTS สำหรับการปรับเปลี่ยนเพิ่มเติมจะพร้อมใช้งานผ่านเมธอดของคำอธิบายประกอบ - มุมมอง: ตอนนี้ Room รองรับการประกาศคลาสเป็นการค้นหาที่เก็บไว้ หรือที่เรียกว่ามุมมอง โดยใช้การกำกับเนื้อหา
@DatabaseView
- Couroutines: ตอนนี้เมธอด DAO สามารถเป็นฟังก์ชันที่ระงับได้แล้ว ใส่
room-ktx
ไว้ใน Dependency เพื่อใช้ประโยชน์จากฟังก์ชันนี้ อาร์ติแฟกต์ ktx ยังมีฟังก์ชันส่วนขยายRoomDatabase.withTransaction
สำหรับการดำเนินการธุรกรรมฐานข้อมูลภายในโคโริวทีนด้วย - ค่าอัตโนมัติ: ตอนนี้ Room รองรับการประกาศคลาสที่มีคำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว ตอนนี้คุณประกาศคําอธิบายประกอบของ Room
@PrimaryKey
,@ColumnInfo
,@Embedded
และ@Relation
ในเมธอดนามธรรมของคลาสที่มีคําอธิบายประกอบค่าอัตโนมัติได้แล้ว โปรดทราบว่าคำอธิบายประกอบเหล่านี้จะต้องมี@CopyAnnotations
ด้วยเพื่อให้ Room เข้าใจอย่างถูกต้อง - การรองรับการทำงานแบบแอ็กซิงทีมเพิ่มเติม: ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ
@Insert
,@Delete
หรือ@Update
รวมถึง@Query
ที่มีคำสั่งINSERT
,DELETE
หรือUPDATE
รองรับประเภทผลลัพธ์ RxCompletable
,Single
,Maybe
และประเภทผลลัพธ์ListenableFuture
ของ Guava นอกจากนี้ยังเป็นฟังก์ชันที่ระงับได้อีกด้วย enableMultiInstanceInvalidation
เป็น API ใหม่ที่ใช้ในRoomDatabase.Builder
เพื่อเปิดใช้การทำให้โมฆะในอินสแตนซ์ RoomDatabase หลายรายการที่ใช้ไฟล์ฐานข้อมูลเดียวกันfallbackToDestructiveMigrationOnDowngrade
เป็น API ใหม่ที่ใช้ในRoomDatabase.Builder
เพื่อสร้างฐานข้อมูลใหม่โดยอัตโนมัติหากมีการดาวน์เกรดignoredColumns
เป็น API ใหม่ในคำอธิบายประกอบ@Entity
ที่ใช้แสดงรายการช่องที่ละเว้นตามชื่อได้- ตอนนี้ Room จะใช้ตัวสร้างหลักของ Kotlin อย่างถูกต้องในคลาสข้อมูล ซึ่งทำให้ไม่ต้องประกาศพร็อพเพอร์ตี้เป็น
vars
เวอร์ชัน 2.1.0-rc01
29 พฤษภาคม 2019
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดในการเริ่มต้น Room ที่อาจเกิดขึ้นเนื่องจากการกำหนดค่า temp_store ที่ตั้งค่าไว้แล้ว b/132602198
- แก้ไขคำเตือนเกี่ยวกับการใช้เครื่องหมายคำพูดคู่สำหรับผู้ใช้ที่ใช้ SQLite 3.27.0 ขึ้นไป b/131712640
- แก้ไขข้อบกพร่องที่ทำให้ InvalidationTracker ขัดข้องเมื่อการตรวจสอบการลบล้างหลายรายการเกิดขึ้นพร้อมกัน b/133457594
เวอร์ชัน 2.1.0-beta01
7 พฤษภาคม 2019
androidx.room 2.1.0-beta01
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-alpha07 ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
เวอร์ชัน 2.1.0-alpha07
25 เมษายน 2019
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- ฟังก์ชันส่วนขยาย
RoomDatabase.withTransaction
มีการเปลี่ยนแปลงเพื่อไม่ให้ใช้บล็อกฟังก์ชันที่มีCoroutineScope
เป็นผู้รับอีกต่อไป ซึ่งจะช่วยป้องกันไม่ให้ข้ามcoroutineScope { }
wrapper เพิ่มเติมที่จําเป็นต่อการดําเนินการในบล็อกธุรกรรมพร้อมกัน
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จับคู่ TypeConverter สำหรับฟังก์ชัน DAO ของ Kotlin ที่มีพารามิเตอร์ประเภท Collection ไม่ได้ b/122066791
เวอร์ชัน 2.1.0-alpha06
22 มีนาคม 2019
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- ตอนนี้การค้นหาธุรกรรมแบบไม่พร้อมกันได้รับการจัดรูปแบบให้เป็นอนุกรมเพื่อให้ Room ไม่ได้ใช้เธรดมากกว่า 1 เธรดในการดำเนินการธุรกรรมฐานข้อมูล
เพิ่ม
RoomDatabase.Builder.setTransactionExecutor(Executor)
เพื่ออนุญาตให้กําหนดค่าผู้ดำเนินการเพื่อใช้กับธุรกรรม RoomDatabase.runInTransaction(Callable)
จะไม่รวมข้อยกเว้นที่ตรวจสอบแล้วไว้ใน RuntimeException อีกต่อไป b/128623748
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่เครื่องมือติดตามการลบล้างจะหยุดสังเกตตารางเนื้อหาหากเพิ่มเครื่องมือสังเกตการณ์สําหรับทั้งตารางเนื้อหาและตาราง FTS ของเนื้อหาภายนอก b/128508917
- อัปเดตไวยากรณ์
Room
SQLite ให้ตรงกับ SQLite 3.24.0 b/110883668
เวอร์ชัน 2.1.0-alpha05
13 มีนาคม 2019
ฟีเจอร์ใหม่
- ฟังก์ชันส่วนขยาย
RoomDatabase.withTransaction
ช่วยให้คุณทำธุรกรรมฐานข้อมูลภายในโคโริวทีนได้อย่างปลอดภัย ฟังก์ชันของส่วนขยายของ Room พร้อมการรองรับ coroutines มีอยู่ในอาร์ติแฟกต์room-ktx
- ตอนนี้เมธอด DAO ที่ไม่เป็นแบบนามธรรมซึ่งมีคำอธิบายประกอบด้วย
@Transaction
จะเป็นฟังก์ชันที่ระงับได้ b/120241587
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- เปลี่ยนชื่ออาร์ติแฟกต์
room-coroutines
เป็นroom-ktx
ตามการตั้งชื่อเดียวกับอาร์ติแฟกต์ androidx อื่นๆ - เราได้เลิกใช้งาน
beginTransaction
,setTransactionSuccessful
และendTransaction
ในRoomDatabase
แล้วเพื่อหันมาใช้runInTransaction
และฟังก์ชันส่วนขยายroom-ktx
withTransaction
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ระบบจะทิ้งอาร์กิวเมนต์ตัวแยกวิเคราะห์หากตัวแยกวิเคราะห์ที่ใช้คือ SIMPLE b/125427014
- แก้ไขข้อบกพร่องที่ Room ไม่สามารถระบุฟังก์ชันที่ระงับไว้อย่างถูกต้องซึ่งมีพารามิเตอร์ที่เป็นคลาสภายใน b/123767877
- แก้ไขข้อบกพร่องที่เมธอด
@Query
DAO ที่เลื่อนเวลาไว้ซึ่งมีคำสั่งINSERT
,UPDATE
หรือDELETE
เตรียมการค้นหาในเธรดหลักอย่างกระตือรือร้น b/123695593 - แก้ไขข้อบกพร่องต่างๆ ที่ Room จะสร้างโค้ดที่ไม่ถูกต้องสำหรับฟังก์ชันการระงับบางอย่าง b/123466702 และ b/123457323
- แก้ไขข้อบกพร่องที่การระงับการใช้เมธอดที่เลิกใช้งานในโค้ดที่สร้างขึ้นไม่ถูกต้อง b/117602586
- อัปเดตการพึ่งพา Room ของ androidx.sqlite เป็น 1.0.2 ซึ่งมีวิธีแก้ไขการจัดการฐานข้อมูลที่เสียหายอย่างถูกต้อง b/124476912
ปัญหาที่ทราบ
- Room 2.1.0-alpha05 ขึ้นอยู่กับอาร์ติแฟกต์
kotlinx-metadata-jvm
ซึ่งขณะนี้ไม่พร้อมใช้งานใน Maven Central (KT-27991) Dependency นี้แก้ไขได้โดยการเพิ่มmaven { url "https://kotlin.bintray.com/kotlinx/" }
ไปยังที่เก็บโปรเจ็กต์
เวอร์ชัน 2.1.0-alpha04
25 มกราคม 2019
ฟีเจอร์ใหม่
- ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ
@Query
ซึ่งมีคำสั่งINSERT
,UPDATE
หรือDELETE
สามารถแสดงผลประเภทแบบแอ็กซิงโครนSingle
,Mayble
,Completable
และListenableFuture
นอกจากนี้ ยังสามารถระงับฟังก์ชันการทำงานได้ด้วย b/120227284
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- ตอนนี้ Room จะแสดงข้อผิดพลาดหากเมธอด DAO ที่ไม่เป็นแบบนามธรรมซึ่งมีคำอธิบายประกอบด้วย
@Transaction
แสดงผลประเภทแบบแอ็กซิง เช่นSingle
,Mayble
,Completable
,LiveData
หรือListenableFuture
เนื่องจากธุรกรรมถูกจำกัดอยู่ในชุดข้อความ ปัจจุบัน Room จึงไม่สามารถเริ่มและสิ้นสุดธุรกรรมเกี่ยวกับฟังก์ชันที่อาจทำการค้นหาในชุดข้อความอื่นได้ b/120109336 OnConflictStrategy.FAIL
และOnConflictStrategy.ROLLBACK
ได้รับการ@Deprecated
เนื่องจากไม่ทํางานตามที่ตั้งใจไว้กับการเชื่อมโยง SQLite ปัจจุบันของ Android b/117266738
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room ไม่ได้ใช้ TypeConverter ของประเภทผลลัพธ์อย่างถูกต้องหากเมธอด DAO เป็นฟังก์ชันที่ระงับ b/122988159
- แก้ไขข้อบกพร่องที่ Room จะระบุฟังก์ชันการระงับที่รับช่วงมาอย่างไม่ถูกต้องว่าไม่มีการระงับ b/122902595
- แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องเมื่อช่อง
@Embedded
อยู่ในคลาสหลักและใช้ในคลาสย่อยหลายคลาส b/121099048 - แก้ไขปัญหาที่ฐานข้อมูลจะหยุดทำงานเมื่อเรียกใช้ฟังก์ชัน DAO suspend ระหว่าง
beginTransaction()
กับendTransaction()
b/120854786
เวอร์ชัน 2.1.0-alpha03
4 ธันวาคม 2018
การเปลี่ยนแปลง API
- ตอนนี้ FTS
tokenizer
ใน@Fts3
/@Fts4
ใช้สตริงแทน Enum แล้ว ซึ่งจะช่วยให้ Room ใช้ตัวแยกวิเคราะห์ที่กำหนดเองได้ ตัวแยกวิเคราะห์ในตัวจะยังคงได้รับการกำหนดในFtsOptions
เป็นสตริงคงที่ b/119234881
ฟีเจอร์ใหม่
- Couroutines: ตอนนี้เมธอด DAO สามารถเป็นฟังก์ชันที่ระงับได้แล้ว เราได้เปิดตัวอาร์ติแฟกต์ใหม่
room-coroutines
เพื่อรองรับฟังก์ชันการระงับใน Room b/69474692 - ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ
@Insert
,@Delete
หรือ@Update
รองรับListenableFuture
เป็นประเภทผลลัพธ์แล้ว b/119418331
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จะพยายามค้นหาตัวสร้างที่มีคอลัมน์ในพร็อพเพอร์ตี้
ignoredColumns
ของ@Entity
อย่างไม่ถูกต้อง b/119830714 - แก้ไขข้อบกพร่องที่ Room จะไม่ทําเครื่องหมายพารามิเตอร์ของเมธอด DAO เป็น "สุดท้าย" ในการใช้งานที่สร้างขึ้น b/118015483
- แก้ไขข้อบกพร่องที่ตัวประมวลผล
Room
จะขัดข้องเมื่อรายงานข้อผิดพลาดในการค้นหาที่มีสัญลักษณ์พิเศษ b/119520136 - แก้ไขข้อบกพร่องที่ Room ปฏิเสธการใช้งาน
Collection
อื่นๆ เป็นอาร์กิวเมนต์ของนิพจน์IN
b/119884035 - แก้ไขข้อบกพร่องที่ LiveData ที่แสดงผลจาก Room จะได้รับการเก็บขยะเมื่อสังเกตการณ์ตลอด ทำให้ไม่แสดงข้อมูลใหม่อีกต่อไป b/74477406
- อัปเดตการล็อกปิดของ
RoomDatabase
เพื่อลดการช่วงชิงล็อก b/117900450
เวอร์ชัน 2.1.0-alpha02
30 ตุลาคม 2018
ฟีเจอร์ใหม่
- เพิ่มการรองรับการอ้างอิง
@DatabaseView
ใน@Relation
b/117680932
การแก้ไขข้อบกพร่อง
- แก้ไขข้อบกพร่องที่ Room จะดำเนินการ I/O ของดิสก์ในเธรดหลักเมื่อสมัครใช้บริการและทิ้งจากประเภทผลลัพธ์ Rx b/117201279
- แก้ไขข้อบกพร่องที่ Room ไม่พบตัวแปลงประเภทที่เหมาะสมสำหรับช่องในคลาสเอนทิตี Kotlin b/111404868
- แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องสําหรับการใช้งานอินเทอร์เฟซ
DAO
ที่มีเมธอดเริ่มต้นของ Kotlin ที่ไม่มีอาร์กิวเมนต์ b/117527454 - อัปเดต
Room
โปรแกรมแยกวิเคราะห์ไวยากรณ์ SQLite ซึ่งแก้ไขปัญหาด้านประสิทธิภาพที่อาจทําให้ใช้เวลาสร้างนาน b/117401230
เวอร์ชัน 2.1.0-alpha01
8 ตุลาคม 2018
ฟีเจอร์ใหม่
- FTS: ตอนนี้ Room รองรับเอนทิตีที่มีตารางการแมป FTS3 หรือ FTS4 แล้ว ตอนนี้คุณสามารถใส่คำอธิบายประกอบเพิ่มเติม
@Fts3
หรือ@Fts4
ลงในชั้นเรียนที่มีคำอธิบายประกอบ@Entity
เพื่อประกาศชั้นเรียนด้วยการแมปตารางการค้นหาแบบข้อความทั้งหมดได้แล้ว ตัวเลือก FTS สำหรับการปรับเปลี่ยนเพิ่มเติมจะพร้อมใช้งานผ่านเมธอดของคำอธิบายประกอบ b/62356416 - มุมมอง: ตอนนี้ Room รองรับการประกาศคลาสเป็นคําค้นหาที่เก็บไว้ หรือที่เรียกว่ามุมมองโดยใช้คําอธิบายประกอบ @DatabaseView แล้ว b/67033276
- ค่าอัตโนมัติ: ตอนนี้ Room รองรับการประกาศคลาสที่มีคำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว ตอนนี้คุณประกาศคำอธิบายประกอบ Room
@PrimaryKey
,@ColumnInfo
,@Embedded
และ@Relation
ในเมธอดนามธรรมของคลาสที่มีคำอธิบายประกอบค่าอัตโนมัติได้แล้ว โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้องมี@CopyAnnotations
ด้วยเพื่อให้ Room เข้าใจอย่างถูกต้อง b/62408420 - การรองรับประเภทผลลัพธ์ Rx เพิ่มเติม: ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ
@Insert
,@Delete
หรือ@Update
รองรับประเภทผลลัพธ์ RxCompletable
,Single<T>
และMaybe<T>
แล้ว b/63317956 - ประเภทแบบคงที่ที่มี
@Relation
: ก่อนหน้านี้ Room กำหนดให้ต้องตั้งค่าช่องที่มีคำอธิบายประกอบ@Relation
ได้ แต่ตอนนี้ช่องดังกล่าวสามารถเป็นพารามิเตอร์คอนสตรัคเตอร์ได้ enableMultiInstanceInvalidation
: เป็น API ใหม่ที่ใช้ในRoomDatabase.Builder
เพื่อเปิดใช้การทำให้โมฆะในอินสแตนซ์ RoomDatabase หลายรายการที่ใช้ไฟล์ฐานข้อมูลเดียวกัน กลไกการทำให้โมฆะแบบหลายอินสแตนซ์นี้ยังทำงานในหลายกระบวนการด้วย b/62334005fallbackToDestructiveMigrationOnDowngrade
: เป็น API ใหม่ที่ใช้ในRoomDatabase.Builder
เพื่อสร้างฐานข้อมูลอีกครั้งโดยอัตโนมัติหากมีการดาวน์เกรด b/110416954ignoredColumns
: เป็น API ใหม่ในคำอธิบายประกอบ@Entity
ที่ใช้แสดงรายการช่องที่ละเว้นตามชื่อได้ มีประโยชน์สำหรับการละเว้นฟิลด์ที่รับค่ามาบนเอนทิตี b/63522075
การเปลี่ยนแปลง API / ลักษณะการทํางาน
mCallback
และmDatabase
ในRoomDatabase
เปลี่ยนเป็น@Deprecated
แล้ว และจะนําออกใน Room เวอร์ชันหลักถัดไป b/76109329
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหา 2 ข้อที่ Room กู้คืนจากฐานข้อมูลที่เสียหายหรือการย้ายข้อมูลที่ไม่ถูกต้องในระหว่างการเริ่มต้นใช้งานไม่ถูกต้อง b/111504749 และ b/111519144
- ตอนนี้ Room จะใช้ตัวสร้างหลักของ Kotlin อย่างถูกต้องในคลาสข้อมูล ซึ่งทำให้คุณไม่ต้องประกาศฟิลด์เป็น
vars
b/105769985
เวอร์ชัน 2.0.0
เวอร์ชัน 2.0.0
1 ตุลาคม 2018
androidx.room 2.0.0
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-rc01
เวอร์ชัน 2.0.0-rc01
20 กันยายน 2018
androidx.room 2.0.0-rc01
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก 2.0.0-beta01
เวอร์ชัน 2.0.0-beta01
2 กรกฎาคม 2018
การเปลี่ยนแปลง API / ลักษณะการทํางาน
- เพิ่ม
RoomDatabase.Builder.setQueryExecutor()
เพื่ออนุญาตให้ปรับแต่งตำแหน่งที่จะเรียกใช้การค้นหา - เพิ่มการรองรับ RxJava2
Observable
- การติดตั้งใช้งาน DAO และฐานข้อมูลที่สร้างขึ้นเสร็จสมบูรณ์แล้ว
การแก้ไขข้อบกพร่อง
- ระบุชื่อคลาส/ฟิลด์ในข้อผิดพลาด "ไม่พบตัวรับค่าสำหรับฟิลด์" b/73334503
- แก้ไขความเข้ากันได้แบบย้อนหลังของ RoomOpenHelper กับ Room เวอร์ชันเก่า b/110197391
ไลบรารีที่ใช้ก่อน AndroidX
สำหรับ Room เวอร์ชันก่อน AndroidX ให้ใส่ข้อมูลต่อไปนี้
dependencies {
def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
// optional - RxJava support for Room
implementation "android.arch.persistence.room:rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "android.arch.persistence.room:guava:$room_version"
// Test helpers
testImplementation "android.arch.persistence.room:testing:$room_version"
}
เวอร์ชัน 1.1.1
เวอร์ชัน 1.1.1
19 มิถุนายน 2018
ห้อง 1.1.1
เหมือนกับห้อง 1.1.1-rc1
เวอร์ชัน 1.1.1-rc1
16 พฤษภาคม 2018
เราขอแนะนําอย่างยิ่งให้ใช้ Room 1.1.1-rc1
แทน 1.1.0
หากคุณใช้การย้ายข้อมูล
แก้ไขข้อบกพร่องที่ Room ไม่จัดการการเริ่มต้นหลังการย้ายข้อมูลอย่างถูกต้อง b/79362399
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.0-beta3
19 เมษายน 2018
การแก้ไขข้อบกพร่อง
- แก้ไขข้อผิดพลาดในการคอมไพล์เมื่อ POJO ของ Kotlin อ้างอิงเอนทิตีความสัมพันธ์ที่กําหนดไว้ใน Java b/78199923
เวอร์ชัน 1.1.0-beta2
5 เมษายน 2018
การแก้ไขข้อบกพร่อง
แก้ไขข้อบกพร่องร้ายแรงในการใช้งาน
Room
RxSingle
และMaybe
ซึ่งจะรีไซเคิลการค้นหาก่อนเวลาอันควร ซึ่งจะทำให้เกิดปัญหาหากคุณเพิ่มผู้สังเกตการณ์มากกว่า 1 รายลงในอินสแตนซ์Single
หรือMaybe
ที่แสดงผล b/76031240[RoomDatabase.clearAllTables][ref-clearAllTables] จะไม่
VACUUM
ฐานข้อมูลหากมีการเรียกใช้ภายในธุรกรรม b/77235565
เวอร์ชัน 1.1.0-beta1
21 มีนาคม 2018
การเปลี่ยนแปลง API
- จากความคิดเห็นในการตรวจสอบ API
@RawQuery
ไม่ยอมรับการส่งString
เป็นพารามิเตอร์การค้นหาอีกต่อไป คุณต้องใช้ [SupportSQLiteQuery][ref-SupportSQLiteQuery] (ดู [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] เพื่อสร้างอินสแตนซ์ของ [SupportSQLiteQuery][ref-SupportSQLiteQuery] ที่รองรับอาร์กิวเมนต์ได้อย่างง่ายดาย) - ตอนนี้เมธอด [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] ของ RoomDatabase.Builder ยอมรับ
vararg int
แทนvararg Integer
แล้ว
การแก้ไขข้อบกพร่อง
- ตอนนี้ [RoomDatabase.clearAllTables][ref-clearAllTables] จะพยายามคืนพื้นที่ให้กับระบบปฏิบัติการโดยการตั้งจุดตรวจสอบ WAL และ
VACUUM
ฐานข้อมูล - [
@RawQuery
][ref-RawQuery] ตอนนี้ยอมรับ Pojo สำหรับพร็อพเพอร์ตี้observedEntities
อยู่แล้ว ตราบใดที่ Pojo อ้างอิงถึงเอนทิตีอย่างน้อย 1 รายการผ่านช่องEmbedded
หรือRelation
b/74041772 - การแบ่งหน้า: ตอนนี้การใช้งาน DataSource ของ Room จัดการกับความสัมพันธ์แบบหลายตาราง (เช่น ความสัมพันธ์และการรวม) อย่างถูกต้องแล้ว ก่อนหน้านี้ รายการเหล่านี้จะทริกเกอร์ผลลัพธ์ใหม่ไม่สำเร็จหรือคอมไพล์ไม่สำเร็จ b/74128314
เวอร์ชัน 1.1.0-alpha1
22 มกราคม 2018
ฟีเจอร์ใหม่
RawQuery
: API ใหม่นี้ช่วยให้เมธอด@Dao
รับ SQL เป็นพารามิเตอร์การค้นหาได้ b/62103290, b/71458963fallBackToDestructiveMigrationsFrom
: API ใหม่นี้ในRoomDatabase.Builder
ช่วยให้ควบคุมระดับรายละเอียดได้มากขึ้นเกี่ยวกับเวอร์ชันสคีมาเริ่มต้นที่อนุญาตให้มีการย้ายข้อมูลแบบทำลาย (เมื่อเทียบกับ fallbackToDestructiveMigration) b/64989640- ตอนนี้ Room รองรับเฉพาะ Paging API เวอร์ชันใหม่ (alpha-4 ขึ้นไป) เท่านั้น และจะเลิกรองรับ Paging API ที่เลิกใช้งานแล้ว
LivePagedListProvider
หากต้องการใช้ Room เวอร์ชันอัลฟ่าใหม่ คุณต้องใช้การแบ่งหน้าalpha-4
ขึ้นไป และเปลี่ยนจากLivePagedListProvider
เป็นLivePagedListBuilder
หากยังไม่ได้ดำเนินการ
การแก้ไขข้อบกพร่อง
- ปรับปรุงการรองรับประเภท Kapt ของ Kotlin b/69164099
- ลำดับของช่องจะไม่ทำให้สคีมาไม่ถูกต้องอีกต่อไป b/64290754