ห้อง

ไลบรารีการคงอยู่ของ Room มีเลเยอร์การเปลี่ยนระดับนามธรรมเหนือ SQLite เพื่อให้เข้าถึงฐานข้อมูลได้อย่างมีประสิทธิภาพมากขึ้นในขณะที่ใช้ประโยชน์จากความสามารถทั้งหมดของ SQLite
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
16 กรกฎาคม 2025 2.7.2 - - 2.8.0-alpha01

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency ใน Room คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google

การขึ้นต่อกันสำหรับ Room ได้แก่ การทดสอบการย้ายข้อมูล Room และ Room RxJava

เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle สำหรับแอปหรือโมดูลของคุณ

Kotlin

dependencies {
    val room_version = "2.7.2"

    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.2"

    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 ค่าเริ่มต้นคือ true ตั้งแต่เวอร์ชัน 2.7.0 ดูรายละเอียดเพิ่มเติมได้ในหมายเหตุของเวอร์ชัน 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 คุณควร เช็คอินไฟล์เหล่านี้ในที่เก็บเพื่อใช้ในการตรวจสอบและการย้ายข้อมูลอัตโนมัติ

คุณไม่สามารถกําหนดค่าตัวเลือกบางอย่างใน Room Gradle Plugin บางเวอร์ชันได้ แม้ว่าคอมไพเลอร์ Room จะรองรับตัวเลือกเหล่านั้นก็ตาม ตารางด้านล่างแสดงรายการแต่ละ ตัวเลือกและแสดงเวอร์ชันของปลั๊กอิน Room Gradle ที่เพิ่มการรองรับ การกำหนดค่าตัวเลือกนั้นโดยใช้ส่วนขยาย room หากเวอร์ชันต่ำกว่า หรือตัวเลือกยังไม่รองรับ คุณสามารถใช้ตัวเลือกโปรแกรมประมวลผลคำอธิบายประกอบแทนได้

ตัวเลือก ตั้งแต่เวอร์ชัน
room.schemaLocation (ต้องระบุ) 2.6.0
room.incremental -
room.generateKotlin -

ใช้ตัวเลือกโปรเซสเซอร์สำหรับคำอธิบายประกอบ

หากไม่ได้ใช้ปลั๊กอิน Gradle ของ Room หรือหากปลั๊กอินเวอร์ชันที่คุณใช้ไม่รองรับตัวเลือกที่ต้องการ คุณสามารถกำหนดค่า 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.8

เวอร์ชัน 2.8.0-alpha01

16 กรกฎาคม 2025

androidx.room:room-*:2.8.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.8.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มอาร์ติแฟกต์ใหม่ androidx.room:room-sqlite-wrapper ซึ่งมี API สำหรับรับ Wrapper SupportSQLiteDatabase ของ RoomDatabase ที่มีการกำหนดค่า SQLiteDriver หากต้องการรับ Wrapper ให้ใช้ฟังก์ชันส่วนขยายใหม่ RoomDatabase.getSupportWrapper() นี่คือสิ่งประดิษฐ์ที่ใช้ร่วมกันได้เพื่อรักษาการใช้งาน SupportSQLiteDatabase ซึ่งมักจะได้จาก RoomDatabase.openHelper.writableDatabase แม้ว่าจะมีการกำหนดค่าฐานข้อมูล Room ด้วย SQLiteDriver ก็ตาม Wrapper นี้มีประโยชน์สำหรับการย้ายข้อมูลโค้ดเบสแบบเพิ่มทีละรายการสำหรับผู้ที่ต้องการใช้ SQLiteDriver แต่มีการใช้งาน API ของ SupportSQLite อย่างกว้างขวางและต้องการใช้ประโยชน์จาก BundledSQLiteDriver (Icf6ac)
  • เพิ่มเป้าหมาย KMP สำหรับ Watch OS และ TV OS (I228f6, b/394238801)

การแก้ไขข้อบกพร่อง

  • แก้ไขภาวะหยุดชะงักที่อาจเกิดขึ้นเป็นครั้งคราวเมื่อใช้ธุรกรรมที่ถูกระงับและ AndroidSQLiteDriver (b/415006268)

เวอร์ชัน 2.7

เวอร์ชัน 2.7.2

18 มิถุนายน 2025

androidx.room:room-*:2.7.2 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.2 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ระบบอ่านค่าคำอธิบายประกอบอย่างไม่ถูกต้องเมื่อประมวลผลแหล่งที่มาดั้งเดิมด้วย KSP และบางครั้งก็ไม่มีการส่งออกสคีมา (b/416549580)
  • แก้ไขข้อบกพร่องที่ความคิดเห็นนำหน้าใน SQL ทำให้คำสั่งทำงานราวกับว่าเป็นคำค้นหาที่ยังไม่อ่าน (b/413061402)
  • แก้ไขปัญหาเกี่ยวกับปลั๊กอิน Gradle ของ Room ที่กำหนดค่าไม่สำเร็จเนื่องจากไดเรกทอรีสคีมาว่างเปล่า (b/417823384)
  • ไม่แสดงข้อผิดพลาด SQLiteException อีกต่อไปเมื่อใช้เวลานานเกินไปในการเชื่อมต่อ แต่จะส่งข้อความบันทึกโดยไลบรารีแทน การบันทึกแทนการส่งข้อยกเว้นจะช่วยหลีกเลี่ยงการวนลูปของ Looper ที่ถูกระงับใน iOS ซึ่งทำให้ Room ตีความการหมดเวลาที่เกิดขึ้นใน Kotlin Coroutine ที่ได้การเชื่อมต่อผิดไป และป้องกันไม่ให้มีการส่งข้อยกเว้นเมื่อแอป iOS ทำงานในเบื้องหลังและกลับมาทำงานต่อในภายหลังระหว่างการดำเนินการกับฐานข้อมูล (b/422448815)

เวอร์ชัน 2.7.1

23 เมษายน 2025

androidx.room:room-*:2.7.1 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.7.1 มีการคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่อง IndexOutOfBoundsException ระหว่างการตรวจสอบตัวแปลงประเภทที่ระบุ (b/409804755)
  • รองรับ RoomDatabase.runInTransaction() เมื่อกำหนดค่า SQLiteDriver ด้วย Room (b/408364828)

เวอร์ชัน 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 อย่างเป็นทางการ นอกจากนี้ Room ยังกำหนดค่าด้วย SQLiteDriver ได้ด้วย ซึ่งเป็นส่วนหนึ่งของการรองรับ KMP ดูข้อมูลเกี่ยวกับวิธีย้ายข้อมูลแอปที่มีอยู่ไปยัง 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)
  • แก้ไขข้อขัดข้องของคอมไพเลอร์ Room เนื่องจาก NullPointerException เมื่อประมวลผลแหล่งที่มาที่ไม่ใช่ JVM ผ่าน KSP (b/396607230, I693c9)
  • แก้ไขปัญหาที่ Room ไม่ทำให้ตารางไม่ถูกต้องเมื่อสิ้นสุดการใช้การเชื่อมต่อ Writer (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 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาการติดตั้งใช้งาน KMP ของ room-paging ซึ่งจะทําให้เกิด 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

เนื่องจากโมเดลการคอมไพล์ Kotlin 2.0 กลยุทธ์การอ้างอิงฟังก์ชันที่จะสร้างชื่อ instantiateImpl() จึงไม่สามารถใช้งานได้อีกต่อไป เราได้เปิดตัว API ใหม่ 2 รายการ ได้แก่ @ConstructedBy และ RoomDatabaseConstructor ซึ่งจะมาแทนที่กลยุทธ์ instantiateImpl() กลยุทธ์ใหม่มีดังนี้

  1. กำหนดออบเจ็กต์ expect ที่ใช้ RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. ลิงก์ออบเจ็กต์กับการประกาศ @Database โดยใช้ @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. สร้างอินสแตนซ์ฐานข้อมูลใหม่โดยไม่ต้องส่งอาร์กิวเมนต์จากโรงงาน

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

แก้ไข b/316978491, b/338446862 และ b/342905180

  • รองรับ @RawQuery ใน KMP ของ Room โดยการเพิ่ม API ใหม่ที่ชื่อ RoomRawQuery ซึ่งคล้ายกับ SupportSQLiteQuery ในแง่ของการเก็บสตริง SQL ดิบและฟังก์ชันเพื่อเชื่อมโยงอาร์กิวเมนต์กับคำสั่ง @RawQueryตอนนี้ฟังก์ชันที่อธิบายประกอบสามารถรับ RoomRawQuery เป็นพารามิเตอร์เดียวได้แล้ว (Iea844, b/330586815)
  • เพิ่มฟังก์ชันโอเวอร์โหลดของ setQueryCallback() ที่ยอมรับ CoroutineContext (Id66ff, b/309996304)
  • เพิ่มการรองรับlinuxArm64เป้าหมาย Kotlin Multiplatform (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 หรือใช้บริบทของโครูทีนอย่างใดอย่างหนึ่ง แต่จะใช้ทั้ง 2 อย่างไม่ได้
  • เพิ่ม API สำหรับกำหนดค่าห้องด้วยไดรเวอร์ SQLite แล้ว: RoomDatabase.Builder.setDriver() ดูข้อมูลเพิ่มเติมเกี่ยวกับ SQLiteDriver API ได้ที่เอกสารประกอบ SQLite KMP
  • เราได้เพิ่ม API สำหรับเข้าถึง SQLiteConnection พื้นฐานจาก API ของไดรเวอร์แล้ว ได้แก่ RoomDatabase.useReaderConnection และ RoomDatabase.useWriterConnection
  • ตอนนี้การเรียกกลับที่เกี่ยวข้องกับ Varios 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 ทั้งหมดแล้ว ตอนนี้อาร์ติแฟกต์ว่างเปล่า โปรดนำออกจากการอ้างอิง

เวอร์ชัน 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 หรือการค้นหา DAO ใน Kotlin CodeGen และคาดว่าจะมีการเขียนใหม่เป็นฟังก์ชันแทนเพื่อหลีกเลี่ยงแนวคิดที่ผิดว่าค่าพร็อพเพอร์ตี้เปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่จัดเก็บไว้คงที่ ข้อจำกัดอีกอย่างที่เพิ่มเข้ามาคือไม่อนุญาตให้ใช้ประเภทการคืนค่าของคอลเล็กชันที่กำหนดค่าเป็น Null ได้ใน Room สำหรับ Kotlin CodeGen อีกต่อไป

คำเตือน: คุณอาจพบว่าโปรเจ็กต์ของคุณมีความเข้มงวดมากขึ้นในแง่ของ Nullability เมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความสามารถในการเป็นค่าว่างของอาร์กิวเมนต์ประเภทมีความสำคัญ แต่ใน Java ส่วนใหญ่จะไม่สนใจ ตัวอย่างเช่น สมมติว่าคุณมีประเภทการคืนค่า `Flow<foo\>` และตารางว่างเปล่า ใน Java CodeGen จะไม่ทำให้เกิดปัญหาใดๆ แต่ใน Kotlin CodeGen คุณจะได้รับข้อผิดพลาด หากต้องการหลีกเลี่ยงปัญหานี้ คุณจะต้องใช้ `Flow<foo?\>` ในกรณีที่ปล่อยค่า Null </foo?\></foo\>

  • เราได้เพิ่มอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Gradle ของ Room ลงใน Room โดยมีรหัส androidx.room ซึ่งจะช่วยแก้ปัญหาต่างๆ ที่มีอยู่ใน Room เกี่ยวกับการมีอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกของเครื่องมือประมวลผลคำอธิบายประกอบ Gradle ดูรายละเอียดเพิ่มเติมได้ที่บันทึกประจำรุ่นของ Room เวอร์ชัน 2.6.0-alpha02
  • ตอนนี้ KSP รองรับคลาสค่าในเอนทิตี Room แล้ว (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 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • ตอนนี้ Room รองรับประเภทการแสดงผลของแผนที่ที่ซ้อนกันในฟังก์ชัน DAO แล้ว (I13f48, 203008711)

การเปลี่ยนแปลง 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 เพื่อไม่ให้ต้องมีการกำหนดค่าต่อตัวแปรเสมอไป ซึ่งหมายความว่าปลั๊กอินสามารถยอมรับตำแหน่งส่วนกลางสำหรับตัวแปรทั้งหมดได้โดยไม่ต้องสร้างไดเรกทอรีหลายรายการ ทำให้การย้ายข้อมูลราบรื่นขึ้น แต่ก็มีความยืดหยุ่นเพียงพอที่จะกำหนดค่ารูปแบบหรือสคีมาประเภทบิลด์ด้วยตนเองได้ในขณะที่ยังคงได้รับประโยชน์จากปลั๊กอิน (บิลด์ที่ทำซ้ำได้และแคชได้) (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

การเปิดตัวเวอร์ชันใหม่นี้มีอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Room Gradle ที่มีรหัส androidx.room ซึ่งช่วยแก้ปัญหาต่างๆ ที่มีอยู่แล้วใน Room เกี่ยวกับการมีอินพุตและเอาต์พุตของสคีมาผ่านตัวเลือกของตัวประมวลผลคำอธิบายประกอบ Gradle ปลั๊กอิน Gradle ของ Room จะกำหนดค่าโปรเจ็กต์เพื่อให้สคีมาที่สร้างขึ้นซึ่งใช้สำหรับการย้ายข้อมูลอัตโนมัติและเป็นเอาต์พุตของงานคอมไพล์ได้รับการกำหนดค่าอย่างถูกต้องเพื่อให้มีการบิลด์ที่ทำซ้ำได้และแคชได้ ปลั๊กอินมี DSL สำหรับกำหนดค่าตำแหน่งสคีมาฐาน ดังนี้

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

จากนั้นปลั๊กอินจะกำหนดค่าคอมไพเลอร์ Room รวมถึงงานการคอมไพล์ต่างๆ และแบ็กเอนด์ (javac, KAPT, KSP) เพื่อส่งออกไฟล์สคีมาไปยังโฟลเดอร์ที่มีรสชาติ เช่น schemas/flavorOneDebug/com.package.MyDatabase/1.json ตามปกติแล้ว ระบบจะเช็คอินไฟล์เหล่านี้ในที่เก็บเพื่อใช้ในการตรวจสอบและการย้ายข้อมูลอัตโนมัติ เมื่อย้ายข้อมูลไปใช้ปลั๊กอินแทนตัวเลือกโปรเซสเซอร์คำอธิบายประกอบ คุณต้องคัดลอกไฟล์สคีมาที่มีอยู่ไปยังไดเรกทอรีรสชาติที่สร้างขึ้นโดยปลั๊กอิน ซึ่งเป็นการดำเนินการย้ายข้อมูลแบบครั้งเดียวที่ต้องดำเนินการด้วยตนเอง เราจะอัปเดตเอกสารประกอบเกี่ยวกับสคีมาใน developers.android.com ในอนาคตเมื่อได้รับความคิดเห็นและปลั๊กอินมีเสถียรภาพแล้ว ดังนั้นโปรดลองใช้

การเปลี่ยนแปลง API

  • RoomDatabase.QueryCallback ได้รับการกำหนดให้เป็นอินเทอร์เฟซที่ใช้งานได้เพื่อให้ใช้การแปลง 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 หรือการค้นหา DAO ใน Kotlin CodeGen และคาดว่าจะมีการเขียนใหม่เป็นฟังก์ชันแทนเพื่อหลีกเลี่ยงแนวคิดที่ผิดว่าค่าพร็อพเพอร์ตี้เปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่จัดเก็บไว้คงที่ ข้อจำกัดอีกอย่างที่เพิ่มเข้ามาคือไม่อนุญาตให้ใช้ประเภทการคืนค่าของคอลเล็กชันที่กำหนดค่าเป็น Null ได้ใน Room สำหรับ Kotlin CodeGen อีกต่อไป

คำเตือน: คุณอาจพบว่าโปรเจ็กต์ของคุณมีความเข้มงวดมากขึ้นในแง่ของ Nullability เมื่อใช้ Kotlin CodeGen ใน Kotlin CodeGen ความสามารถในการเป็นค่าว่างของอาร์กิวเมนต์ประเภทมีความสำคัญ แต่ใน Java ส่วนใหญ่จะไม่สนใจ ตัวอย่างเช่น สมมติว่าคุณมีประเภทการคืนค่า `Flow<foo\>` และตารางว่างเปล่า ใน Java CodeGen จะไม่ทำให้เกิดปัญหาใดๆ แต่ใน Kotlin CodeGen คุณจะได้รับข้อผิดพลาด หากต้องการหลีกเลี่ยงปัญหานี้ คุณจะต้องใช้ `Flow<foo?\>` ในกรณีที่ปล่อยค่า Null </foo?\></foo\>

การเปลี่ยนแปลง API

  • ป้องกันการใช้งานคอลเล็กชันที่อนุญาตให้มีค่า Null ในประเภทการคืนค่าของเมธอด DAO ที่ไม่มีความหมาย (I777dc, b/253271782, b/259426907)
  • เพิ่ม API สำหรับสร้างโฟลว์ที่ปล่อยการเปลี่ยนแปลงเครื่องมือติดตามการลบล้าง API นี้มีประโยชน์ในการสร้างสตรีมที่ต้องตอบสนองต่อการเปลี่ยนแปลงฐานข้อมูล (I8c790, b/252899305)

การแก้ไขข้อบกพร่อง

  • ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้แบบนามธรรมเป็นตัวรับ DAO หรือการค้นหา DAO ใน 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 ต่างๆ ที่รับอาร์กิวเมนต์การค้นหาจาก Invariant (Array<Any?>) เป็น Contravariant (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 ใหม่ room-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 จะพยายามแก้ไขคอลัมน์ที่ไม่ชัดเจนในการค้นหาแบบ Multimap ซึ่งจะช่วยให้ระบบแมป JOIN กับตารางที่มีตารางชื่อเดียวกันกับออบเจ็กต์ข้อมูลผลลัพธ์ได้อย่างถูกต้อง (I4b444, b/201306012, b/212279118)

เวอร์ชัน 2.5.0-alpha01

23 กุมภาพันธ์ 2022

androidx.room:room-*:2.5.0-alpha01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.5.0-alpha01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • แก้ไขปัญหาที่ไม่ได้บังคับใช้การใช้งาน Room @IntDef ในแหล่งที่มาของ Kotlin (I75f41, b/217951311)
  • แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาตให้ใช้ @Query ในตัวรับพร็อพเพอร์ตี้อีกครั้ง (I0a09b)
  • แปลง room-common จาก Java เป็น Kotlin (I69c48, b/206858235)

    หมายเหตุ: คุณอาจพบปัญหาความเข้ากันไม่ได้ของแหล่งที่มาเนื่องจากมีการย้ายพร็อพเพอร์ตี้บางรายการไปยังออบเจ็กต์คู่ในระหว่างการแปลงไลบรารีเป็น Kotlin หากโค้ดของคุณอยู่ใน Kotlin และเรียกใช้ Room เวอร์ชันเก่า เวอร์ชันใหม่จะต้องมีคำต่อท้าย ".Companion" เมื่อเข้าถึงพร็อพเพอร์ตี้เหล่านี้

  • แปลงการย้ายข้อมูล Room จาก Java เป็น Kotlin (I2724b, b/206858622)
  • แปลงไฟล์ที่เกี่ยวข้องกับ paging ใน room-runtime จาก Java เป็น Kotlin (I82fc8, b/206859668)
  • เพิ่ม API สำหรับการล็อกและการใช้งานแบบหลายกระบวนการที่ระดับ FrameworkSQLite* เพื่อปกป้องการสร้างและการย้ายข้อมูลฐานข้อมูลครั้งแรกแบบหลายกระบวนการ (Ied267, b/193182592)

การแก้ไขข้อบกพร่อง

  • เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในแหล่งที่มาของ Kotlin การเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยใน Room ซึ่งจะใช้ชื่อแหล่งที่มาของฟังก์ชันขณะจับคู่กับพร็อพเพอร์ตี้เป็นตัวรับ/ตัวตั้งค่า (ก่อนหน้านี้ใช้ชื่อ 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 suspend ของ 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 ซึ่งจะใช้ชื่อแหล่งที่มาของฟังก์ชันขณะจับคู่กับพร็อพเพอร์ตี้เป็นตัวรับ/ตัวตั้งค่า (ก่อนหน้านี้ใช้ชื่อ 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 ในการย้ายข้อมูลอัตโนมัติ: @ProvidedAutoMigrationSpec เป็น API ใหม่สำหรับการประกาศว่า AutoMigrationSpec จะได้รับการจัดสรรที่รันไทม์ผ่าน RoomDatabase.Builder#addAutoMigrationSpec() ซึ่งจะช่วยให้เฟรมเวิร์กการแทรกการอ้างอิงระบุข้อมูลจำเพาะดังกล่าวได้เมื่อต้องการการอ้างอิงที่ซับซ้อน
  • การรองรับเครื่องมือช่วยทดสอบการย้ายข้อมูลสำหรับการย้ายข้อมูลอัตโนมัติ: เราได้อัปเดต MigrationTestHelper ของ Room เพื่อรองรับการย้ายข้อมูลอัตโนมัติโดยการจัดหา API ตัวสร้างใหม่ที่รับคลาสฐานข้อมูลภายใต้การทดสอบ ซึ่งจะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติได้โดยอัตโนมัติในลักษณะเดียวกันในระหว่าง runMigrationsAndValidate
  • การรองรับการแบ่งหน้าของ Room: androidx.room:room-paging ได้รับการเผยแพร่แล้ว ซึ่งให้การรองรับการแบ่งหน้า 3.0 ดั้งเดิมสำหรับการค้นหา Room ที่แสดงผล androidx.paging.PagingSource
  • วิธีการค้นหาเชิงสัมพันธ์: ตอนนี้ Room รองรับประเภทการคืนค่า multimap @Dao ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของ Multimap ที่รองรับคือ Map, SparseArray, LongSparseArray รวมถึง ImmutableMap, ImmutableSetMultimap และ ImmutableListMultimap ของ Guava

เวอร์ชัน 2.4.0-rc01

1 ธันวาคม 2021

androidx.room:room-*:2.4.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-rc01 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • อัปเดตการขึ้นต่อกันของ Room กับ KSP เป็น 1.6.0-1.0.1 เพื่อรองรับ Kotlin 1.6

เวอร์ชัน 2.4.0-beta02

17 พฤศจิกายน 2021

androidx.room:room-*:2.4.0-beta02 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.4.0-beta02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เราได้เพิ่มการรองรับ SparseArray และ LongSparseArray ใน @MapInfo (Ic91a2b/138910317)

การแก้ไขข้อบกพร่อง

  • เราได้เพิ่มเครื่องมือวิเคราะห์ TypeConverter ใหม่ที่พิจารณาข้อมูลการยอมรับค่าว่าง ในประเภทต่างๆ เนื่องจากข้อมูลนี้ใช้ได้เฉพาะใน KSP ระบบจึงเปิดใช้โดยค่าเริ่มต้นใน KSP เท่านั้น หากทำให้เกิดปัญหา คุณสามารถปิดได้โดยส่ง room.useNullAwareTypeAnalysis=false ไปยังตัวประมวลผล คำอธิบายประกอบ หากเกิดกรณีดังกล่าว โปรดรายงานข้อบกพร่องเนื่องจากเราจะนำฟีเจอร์นี้ออกในอนาคต เครื่องมือวิเคราะห์ TypeConverter ใหม่นี้แนะนำให้ระบุเฉพาะ TypeConverter ที่รับค่าที่ไม่ใช่ Null เนื่องจากเครื่องมือวิเคราะห์ใหม่มีความสามารถในการห่อหุ้มด้วยการตรวจสอบ 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 จะใช้ 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 ในตัวได้ โดยค่าเริ่มต้น ตัวแปลงเหล่านี้จะเปิดอยู่ แต่คุณปิดใช้ตัวแปลงสำหรับขอบเขตหนึ่งๆ หรือสำหรับทั้งฐานข้อมูลได้ ดูรายละเอียดได้ที่เอกสารประกอบ TypeConverters (36ae9e, b/195413406)

  • รองรับคีย์/ค่าที่ไม่ใช่ POJO สำหรับประเภทการคืนค่า Multimap ใน DAO ผ่าน Annotation @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)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ผลลัพธ์ของคำค้นหาแบบหลายแผนที่เรียงลำดับไม่ถูกต้องเมื่อคำค้นหามีคําสั่ง 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 ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของ Multimap ที่รองรับคือ Map รวมถึง ImmutableMap, ImmutableSetMultimap และ ImmutableListMultimap ของ Guava

    ตัวอย่างการค้นหาแบบหลายแผนที่

    แผนที่ความสัมพันธ์แบบหนึ่งต่อหนึ่ง

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

    แผนที่ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (แผนที่หลายรายการมาตรฐาน)

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

    นอกจากนี้ คุณยังห่อหุ้มผลการค้นหาแบบหลายแผนที่ในประเภทการคืนค่าแบบอะซิงโครนัสที่รองรับได้ด้วย เช่น LiveData, Observable ของ Rx หรือ Flow ของโครูทีน

การเรียกห้อง

  • androidx.room:room-paging เปิดตัวแล้ว โดยรองรับ 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 สร้างขึ้นด้วยการใช้งานที่สร้างขึ้นบน API ของ Paging 3.0 การใช้งาน PagingSource ใหม่จะแยกวิเคราะห์คีย์แตกต่างกัน ดังนั้นคีย์ที่ระบุด้วยตนเองใน PagingSource ของ Room จะต้องคำนึงถึงการเปลี่ยนแปลงลักษณะการทำงานนี้ รวมถึง initialKey ที่ส่งผ่านตัวสร้างของ Pager หน้าเว็บจะเริ่มโหลดจาก Key โดย Key จะเป็นรายการแรกที่โหลด ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งถือว่า LoadParams.Refresh.Key เป็นตำแหน่งการเลื่อนของผู้ใช้ และจะโหลดรายการทั้งก่อนและหลังคีย์

  • โดยคุณจะเลือกใช้หรือไม่ใช้ก็ได้ และหากเลือกไม่ใช้ ระบบจะกลับไปใช้การรองรับ Paging 3.0 ที่มีอยู่ซึ่งเปิดตัวใน Room 2.3 อย่างไรก็ตาม อาร์ติแฟกต์นี้จะกลายเป็นอาร์ติแฟกต์ที่ต้องใช้ในรุ่นต่อๆ ไปสำหรับผู้ที่ใช้ Room กับ Paging 3.0 หากต้องการเลือกใช้ ให้เพิ่มอาร์ติแฟกต์การเรียกหน้าห้องใหม่ลงใน Classpath หากใช้ 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

  • อัปเดต Room เป็นเวอร์ชัน MigrationTestHelper เพื่อรองรับการย้ายข้อมูลอัตโนมัติโดยการจัดหา API ตัวสร้างใหม่ที่รับคลาสฐานข้อมูลภายใต้การทดสอบ ซึ่งจะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติได้โดยอัตโนมัติในลักษณะเดียวกันในระหว่าง runMigrationsAndValidate

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับไลบรารีเนทีฟ SQLite ของ Room เพื่อรองรับชิป M1 ของ Apple (b/174695268

  • แก้ไขปัญหาที่ Room จะไม่แสดงข้อผิดพลาดเมื่อประเภทการคืนค่าของฟังก์ชัน @Transaction เป็น Flow (I56ddd, b/190075899)

  • แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติเกี่ยวกับดัชนี b/177673291

การอัปเดตการขึ้นต่อกัน

  • ตอนนี้การรองรับ 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() ซึ่งจะช่วยให้เฟรมเวิร์กการแทรกการอ้างอิงระบุข้อมูลจำเพาะดังกล่าวได้เมื่อต้องการการอ้างอิงที่ซับซ้อน

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับการย้ายข้อมูลอัตโนมัติที่ระบบสร้าง @DatabaseView ไม่ถูกต้อง

การมีส่วนร่วมภายนอก

  • แก้ไขปัญหาใน JournalMode.TRUNCATE ของ Room ที่บางครั้งระบบเรียกใช้การเรียกกลับ InvalidationTracker อย่างไม่ถูกต้อง ช้าเกินไป หรือไม่เรียกใช้เลย ขอขอบคุณ 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 เป็น String และในทางกลับกันโดยค่าเริ่มต้นหากไม่มีการระบุ หากมีตัวแปลงประเภทสำหรับ 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
  • การรองรับ Paging 3.0: ตอนนี้ Room จะรองรับการสร้างการติดตั้งใช้งานสำหรับเมธอดที่ใส่คำอธิบายประกอบ @Query ซึ่งมีประเภทการคืนค่าเป็น androidx.paging.PagingSource แล้ว

เวอร์ชัน 2.3.0-rc01

24 มีนาคม 2021

androidx.room:room-*:2.3.0-rc01 ได้รับการเผยแพร่แล้ว เวอร์ชัน 2.3.0-rc01 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ทำให้ Room สร้างคำค้นหา Coroutine Flow ไม่ได้เพื่อใช้ในบล็อก 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 ในลักษณะเดียวกับที่ทำสำหรับเมธอด DAO ที่มีคำอธิบายประกอบ @RawQuery ขอขอบคุณ "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 Symbol Processing 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 เป็น String และในทางกลับกันเป็นค่าเริ่มต้นหากไม่มีการระบุ หากมีตัวแปลงประเภทสำหรับ Enum อยู่แล้ว Room จะให้ความสำคัญกับการใช้ตัวแปลงนั้นมากกว่าตัวแปลงเริ่มต้น (b/73132006)

ปัญหาที่ทราบ

  • หากมีตัวแปลงประเภททางเดียวสำหรับการอ่าน Enum อยู่แล้ว Room อาจใช้ตัวแปลง String เป็น Enum ในตัวโดยไม่ตั้งใจ ซึ่งอาจไม่เป็นที่ต้องการ นี่เป็นปัญหาที่ทราบอยู่แล้ว และแก้ไขได้โดยการทำให้เป็นตัวแปลงแบบ 2 ทาง ดู b/175707691

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ Room ปิดใช้การประมวลผลคำอธิบายประกอบแบบเพิ่มทีละรายการอย่างไม่ถูกต้องใน JDK เวอร์ชันใหม่กว่า (b/171387388)
  • แก้ไขปัญหาเกี่ยวกับ Room ที่ค้นหาคลาสที่สร้างขึ้นเมื่อใช้ตัวโหลดคลาสหลายตัว ขอขอบคุณสำหรับการแก้ไข "Serendipity | 892449346@qq.com" (b/170141113)
  • แก้ไขปัญหาที่ Room สร้างโค้ดไม่ถูกต้องเมื่อ @Dao ของ Kotlin มีคลาสฐานซึ่ง Generics เป็น Primitive ใน 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 ที่มีประเภทซูเปอร์ไทป์ทั่วไปด้วย "Primitive" ของ 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 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • การรองรับ Paging 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 ไว้กับ Annotation Processor เพื่อหลีกเลี่ยงความขัดแย้งด้านเวอร์ชันกับโปรเซสเซอร์อื่นๆ ที่ใช้ 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 ตระหนักถึง Direct Boot ขอขอบคุณ "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 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาการระงับธุรกรรมที่อาจทำให้เกิดการหยุดชะงักหากมีการยกเลิกโครูทีนอย่างรวดเร็วก่อนที่ธุรกรรมจะเริ่มขึ้นจริง (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 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่การรวบรวมความสัมพันธ์แบบหนึ่งต่อหนึ่งที่มีมากกว่า 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() ใช้ในกรณีที่ไฟล์ฐานข้อมูลที่สร้างไว้ล่วงหน้าอยู่ในโฟลเดอร์ชิ้นงานของ APK ส่วน createFromFile() ใช้ในกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้งาน API เหล่านี้จะเปลี่ยนลักษณะการทำงานของการย้ายข้อมูลแบบทำลายล้างเพื่อให้ Room พยายามคัดลอกฐานข้อมูลที่สร้างไว้ล่วงหน้าอีกครั้งหากมีในระหว่างการย้ายข้อมูลแบบย้อนกลับ ไม่เช่นนั้น Room จะย้อนกลับไปเป็นการทิ้งและสร้างตารางทั้งหมดใหม่b/62185732
  • ค่าเริ่มต้นของสคีมา: @ColumnInfo มีพร็อพเพอร์ตี้ใหม่ defaultValue ซึ่งใช้ระบุค่าเริ่มต้นของคอลัมน์ได้แล้ว ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูลและจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากมีการระบุ b/64088772
  • ความสัมพันธ์แบบหลายต่อหลาย: @Relation มีพร็อพเพอร์ตี้ใหม่ associateBy ซึ่งรับคำอธิบายประกอบใหม่ @Junction ที่ใช้ในการประกาศความสัมพันธ์ที่ ต้องเป็นไปตามตารางเชื่อม (หรือที่เรียกว่าตารางรวม) ด้วย b/69201917
  • ความสัมพันธ์แบบหนึ่งต่อหนึ่ง: เราได้ยกเลิกข้อจำกัดในฟิลด์ POJO ที่มีคำอธิบายประกอบด้วย @Relation ให้เป็นประเภท List หรือ Set แล้ว ซึ่งจะช่วยให้ แสดงความสัมพันธ์แบบค่าเดียวได้ b/62905145
  • เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO @Insert, @Update และ @Delete มีพร็อพเพอร์ตี้ใหม่ targetEntity ซึ่งช่วยให้ระบุตารางเป้าหมายที่ เมธอด DAO มีไว้เพื่อดำเนินการได้ ซึ่งจะช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งจะได้รับการตีความเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตให้แทรก ลบ และอัปเดตบางส่วนได้ b/127549506
  • Coroutines Flow: @Query ตอนนี้เมธอด DAO สามารถมีประเภทการคืนค่าเป็น Flow<T> ได้แล้ว Flow ที่แสดงผลจะปล่อยค่าชุดใหม่ซ้ำอีกครั้งหากตารางที่สังเกตใน การค้นหาไม่ถูกต้อง การประกาศฟังก์ชัน DAO ที่มีประเภทการคืนค่า Channel<T> เป็นข้อผิดพลาด แต่ Room ขอแนะนำให้คุณใช้ Flow แทน แล้วใช้ฟังก์ชันที่อยู่ข้างเคียงเพื่อแปลง Flow เป็น Channel b/130428884
  • ตัวประมวลผลคำอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นตัวประมวลผลคำอธิบายประกอบที่แยก Gradle และเปิดใช้การเพิ่มได้ผ่านตัวเลือกตัวประมวลผล room.incremental ดูข้อมูลเพิ่มเติมได้ที่ ตัวเลือกคอมไพเลอร์ Room หากพบปัญหา โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การวัดผลแบบเพิ่มขึ้นโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต 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> ได้แล้ว Flow ที่แสดงผลจะปล่อยค่าชุดใหม่ซ้ำอีกครั้งหากตารางที่สังเกตใน การค้นหาไม่ถูกต้อง การประกาศฟังก์ชัน 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 เมื่อเปิดใช้การลบล้างหลายอินสแตนซ์และระบบปิด InvalidationService 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() ใช้ในกรณีที่ไฟล์ฐานข้อมูลที่สร้างไว้ล่วงหน้าอยู่ในโฟลเดอร์ชิ้นงานของ APK ส่วน createFromFile() ใช้ในกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้งาน API เหล่านี้จะเปลี่ยนลักษณะการทำงานของการย้ายข้อมูลแบบทำลายล้างเพื่อให้ Room พยายามคัดลอกฐานข้อมูลที่สร้างไว้ล่วงหน้าอีกครั้งหากมีในระหว่างการย้ายข้อมูลแบบย้อนกลับ ไม่เช่นนั้น Room จะย้อนกลับไปเป็นการทิ้งและสร้างตารางทั้งหมดใหม่b/62185732
  • ค่าเริ่มต้นของสคีมา: @ColumnInfo มีพร็อพเพอร์ตี้ใหม่ defaultValue ซึ่งใช้ระบุค่าเริ่มต้นของคอลัมน์ได้แล้ว ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูลและจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากมีการระบุ b/64088772

    หมายเหตุ: หากสคีมาฐานข้อมูลมีค่าเริ่มต้นอยู่แล้ว เช่น ค่าที่เพิ่มผ่าน ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z และคุณตัดสินใจที่จะกำหนดค่าเริ่มต้นผ่าน @ColumnInfo ให้กับคอลัมน์เดียวกัน คุณอาจต้องระบุการย้ายข้อมูลเพื่อตรวจสอบค่าเริ่มต้นที่ไม่ได้ระบุ ดูข้อมูลเพิ่มเติมได้ที่ การย้ายข้อมูลห้อง

  • ความสัมพันธ์แบบหลายต่อหลาย: @Relation มีพร็อพเพอร์ตี้ใหม่ associateBy ซึ่งรับคำอธิบายประกอบใหม่ @Junction ที่ใช้ในการประกาศความสัมพันธ์ที่ ต้องเป็นไปตามตารางเชื่อม (หรือที่เรียกว่าตารางรวม) ด้วย b/69201917
  • ความสัมพันธ์แบบหนึ่งต่อหนึ่ง: เราได้ยกเลิกข้อจำกัดในฟิลด์ POJO ที่มีคำอธิบายประกอบด้วย @Relation ให้เป็นประเภท List หรือ Set แล้ว ซึ่งจะช่วยให้ แสดงความสัมพันธ์แบบค่าเดียวได้ b/62905145
  • เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO @Insert, @Update และ @Delete มีพร็อพเพอร์ตี้ใหม่ targetEntity ซึ่งช่วยให้ระบุตารางเป้าหมายที่ เมธอด DAO มีไว้เพื่อดำเนินการได้ ซึ่งจะช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งจะได้รับการตีความเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตให้แทรก ลบ และอัปเดตบางส่วนได้ b/127549506
  • ตัวประมวลผลคำอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นตัวประมวลผลคำอธิบายประกอบที่แยก Gradle และเปิดใช้การเพิ่มได้ผ่านตัวเลือกตัวประมวลผล room.incremental ดูข้อมูลเพิ่มเติมได้ที่ ตัวเลือกคอมไพเลอร์ Room หากพบปัญหา โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การวัดผลแบบเพิ่มขึ้นโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต 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
  • Coroutines: ตอนนี้เมธอด DAO สามารถเป็นฟังก์ชันระงับได้แล้ว รวม room-ktx ไว้ในทรัพยากร Dependency เพื่อใช้ประโยชน์จากฟังก์ชันนี้ อาร์ติแฟกต์ KTX ยังมีฟังก์ชันส่วนขยาย RoomDatabase.withTransaction สำหรับ การทำธุรกรรมในฐานข้อมูลภายในโครูทีนด้วย
  • Auto Value: ตอนนี้ Room รองรับการประกาศคลาสที่ใส่คำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว ตอนนี้คุณประกาศคำอธิบายประกอบของห้อง @PrimaryKey, @ColumnInfo, @Embedded และ @Relation ในเมธอดแบบนามธรรมของคลาสที่ใส่คำอธิบายประกอบด้วยค่าอัตโนมัติได้แล้ว โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้องมี@CopyAnnotationsด้วยเพื่อให้ Room เข้าใจได้อย่างถูกต้อง
  • การรองรับ Async เพิ่มเติม: ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ @Insert, @Delete หรือ @Update พร้อมกับ @Query ที่มีคำสั่ง INSERT, DELETE หรือ UPDATE รองรับประเภทการคืนค่า Rx Completable, 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

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาดในการเริ่มต้นห้องที่อาจเกิดขึ้นเนื่องจากการกำหนดค่า 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 สำหรับฟังก์ชัน Kotlin DAO ที่มีพารามิเตอร์ประเภท Collection b/122066791

เวอร์ชัน 2.1.0-alpha06

22 มีนาคม 2019

การเปลี่ยนแปลง API / ลักษณะการทำงาน

  • ตอนนี้การค้นหาธุรกรรมแบบไม่พร้อมกันจะได้รับการจัดลำดับเพื่อให้ Room ไม่ใช้เธรดมากกว่า 1 รายการในการดำเนินการธุรกรรมในฐานข้อมูล RoomDatabase.Builder.setTransactionExecutor(Executor) เพิ่มเพื่ออนุญาต การกำหนดค่าตัวดำเนินการที่จะใช้สำหรับธุรกรรม
  • RoomDatabase.runInTransaction(Callable) จะไม่ห่อหุ้มข้อยกเว้นที่ตรวจสอบแล้ว เป็น RuntimeExceptions อีกต่อไป b/128623748

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ตัวติดตามการลบล้างจะหยุดสังเกตตารางเนื้อหา หากมีการเพิ่มผู้สังเกตการณ์ทั้งตารางเนื้อหาและตาราง FTS ของเนื้อหาภายนอก b/128508917
  • อัปเดตไวยากรณ์ Room SQLite ให้ตรงกับ SQLite 3.24.0 b/110883668

เวอร์ชัน 2.1.0-alpha05

13 มีนาคม 2019

ฟีเจอร์ใหม่

  • ฟังก์ชันส่วนขยาย RoomDatabase.withTransaction ช่วยให้คุณทำธุรกรรมในฐานข้อมูลได้อย่างปลอดภัยภายในโครูทีน ฟังก์ชันส่วนขยายห้องพร้อมการรองรับโครูทีนจะอยู่ในอาร์ติแฟกต์ 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) คุณแก้ไขการขึ้นต่อกันนี้ได้โดยเพิ่ม 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 ระหว่าง beginTransaction() กับ endTransaction() b/120854786

เวอร์ชัน 2.1.0-alpha03

4 ธันวาคม 2018

การเปลี่ยนแปลง API

  • ตอนนี้ FTS tokenizer ใน @Fts3/@Fts4 จะใช้สตริงแทน Enum ซึ่งช่วยให้ Room ใช้ตัวแยกคำที่กำหนดเองได้ โดยยังคงกำหนดตัวแยกคำในตัวไว้ใน FtsOptions เป็นค่าคงที่สตริง b/119234881

ฟีเจอร์ใหม่

  • Coroutines: ตอนนี้เมธอด DAO สามารถเป็นฟังก์ชันระงับได้แล้ว เราได้เปิดตัวอาร์ติแฟกต์ใหม่ room-coroutines เพื่อรองรับฟังก์ชันระงับใน Room b/69474692
  • ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ @Insert, @Delete หรือ @Update รองรับ ListenableFuture เป็นประเภทการคืนค่าแล้ว b/119418331

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ Room พยายามค้นหาตัวสร้างที่มีคอลัมน์ในพร็อพเพอร์ตี้ ignoredColumns ของ @Entity อย่างไม่ถูกต้อง b/119830714
  • แก้ไขข้อบกพร่องที่ทำให้ Room ไม่ทำเครื่องหมายพารามิเตอร์ของเมธอด DAO เป็น final ในการติดตั้งใช้งานที่สร้างขึ้น 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 แล้ว ตอนนี้คุณสามารถใส่คำอธิบายประกอบเพิ่มเติมให้กับคลาสที่ใส่คำอธิบายประกอบด้วย @Entity โดยใช้ @Fts3 หรือ @Fts4 เพื่อประกาศคลาสที่มีตารางการค้นหาข้อความแบบเต็มของการแมป ตัวเลือก FTS สำหรับการปรับแต่งเพิ่มเติมจะพร้อมใช้งานผ่านเมธอดของคำอธิบายประกอบ b/62356416
  • มุมมอง: ตอนนี้ Room รองรับการประกาศคลาสเป็นคำค้นหาที่จัดเก็บไว้ หรือที่เรียกว่ามุมมองโดยใช้คำอธิบายประกอบ @DatabaseView b/67033276
  • Auto Value: ตอนนี้ Room รองรับการประกาศคลาสที่ใส่คำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว ตอนนี้คุณประกาศคำอธิบายประกอบ Room @PrimaryKey, @ColumnInfo, @Embedded และ @Relation ได้แล้วในเมธอดนามธรรมของคลาสที่มีคำอธิบายประกอบค่าอัตโนมัติ โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้องมาพร้อมกับ @CopyAnnotations เพื่อให้ Room เข้าใจได้อย่างถูกต้อง b/62408420
  • การรองรับประเภทการคืนค่า Rx เพิ่มเติม: ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบด้วย @Insert, @Delete หรือ @Update รองรับประเภทการคืนค่า Rx Completable, Single<T> และ Maybe<T> แล้ว b/63317956
  • ประเภทที่เปลี่ยนแปลงไม่ได้พร้อม @Relation: ก่อนหน้านี้ Room กำหนดให้ฟิลด์ที่ใส่คำอธิบายประกอบ @Relation ต้องตั้งค่าได้ แต่ตอนนี้ฟิลด์ดังกล่าวสามารถเป็นพารามิเตอร์ของตัวสร้างได้
  • enableMultiInstanceInvalidation: เป็น API ใหม่ใน RoomDatabase.Builder เพื่อเปิดใช้การลบล้างในหลายอินสแตนซ์ของ RoomDatabase โดยใช้ไฟล์ฐานข้อมูลเดียวกัน กลไกการล้างข้อมูลหลายอินสแตนซ์นี้ยังใช้ได้กับหลายกระบวนการด้วย b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: เป็น API ใหม่ใน RoomDatabase.Builder ที่จะสร้างฐานข้อมูลขึ้นมาใหม่โดยอัตโนมัติหากมีการดาวน์เกรด b/110416954
  • ignoredColumns: เป็น 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 และฐานข้อมูลที่สร้างขึ้นเสร็จสมบูรณ์แล้ว

การแก้ไขข้อบกพร่อง

  • ระบุชื่อคลาส/ฟิลด์ในข้อผิดพลาด "ไม่พบ Getter สำหรับฟิลด์" 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

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อผิดพลาดในการคอมไพล์เมื่อ Kotlin POJO อ้างอิงเอนทิตีความสัมพันธ์ที่ กำหนดไว้ใน Java b/78199923

เวอร์ชัน 1.1.0-beta2

5 เมษายน 2018

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องร้ายแรงในการใช้งาน Room Rx Single และ Maybe ซึ่งจะรีไซเคิลการค้นหาก่อนเวลาอันควร ทำให้เกิดปัญหาหากคุณเพิ่ม Observer มากกว่า 1 รายการไปยังอินสแตนซ์ Single หรือ Maybe ที่ส่งคืน b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] จะไม่VACUUMฐานข้อมูล หากมีการเรียกใช้ภายในธุรกรรม b/77235565

เวอร์ชัน 1.1.0-เบต้า1

21 มีนาคม 2018

การเปลี่ยนแปลง API

  • @RawQuery ไม่รับส่ง String เป็นพารามิเตอร์การค้นหาอีกต่อไปตามความคิดเห็นจากการตรวจสอบ API คุณต้องใช้ [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/71458963
  • fallBackToDestructiveMigrationsFrom: API ใหม่นี้ใน RoomDatabase.Builder ช่วยให้ควบคุมได้ละเอียดยิ่งขึ้นว่าจะอนุญาตการย้ายข้อมูลแบบทำลายจากสคีมาเริ่มต้นเวอร์ชันใด (เมื่อเทียบกับ fallbackToDestructiveMigration) b/64989640
  • ตอนนี้ Room รองรับเฉพาะ Paging API เวอร์ชันใหม่กว่า (alpha-4 ขึ้นไป) และจะหยุดรองรับ LivePagedListProviderที่เลิกใช้งานแล้ว หากต้องการใช้เวอร์ชันอัลฟ่าของฟีเจอร์ห้องใหม่ คุณจะต้องใช้การแบ่งหน้า alpha-4ขึ้นไป และเปลี่ยนจาก LivePagedListProvider เป็น LivePagedListBuilder หากยังไม่ได้ดำเนินการ

การแก้ไขข้อบกพร่อง

  • ปรับปรุงการรองรับประเภท Kapt ของ Kotlin b/69164099
  • ลำดับของฟิลด์จะไม่ทำให้สคีมาไม่ถูกต้องอีกต่อไป b/64290754