ห้อง

ไลบรารีการคงอยู่ของห้องจะมี ชั้นแอบสแตรกชันบน SQLite เพื่อช่วยให้เข้าถึงฐานข้อมูลได้อย่างมีประสิทธิภาพยิ่งขึ้น ที่ใช้ประโยชน์จาก SQLite อย่างเต็มที่
อัปเดตล่าสุด รุ่นที่เสถียร ตัวเลือกถอนการอ้างสิทธิ์ รุ่นเบต้า รุ่นอัลฟ่า
7 สิงหาคม 2024 2.6.1 - - 2.7.0-alpha06

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

หากต้องการเพิ่มทรัพยากร Dependency สำหรับห้องแชท คุณต้องเพิ่มที่เก็บ Google Maven ไปยัง อ่านที่เก็บ Maven ของ Google เพื่อดูข้อมูลเพิ่มเติม

ทรัพยากร Dependency สำหรับห้องประกอบด้วย การย้ายข้อมูลห้องทดสอบและ ห้อง RxJava

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

ดึงดูด

dependencies {
    def room_version = "2.6.1"

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

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

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

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

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

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

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

Kotlin

dependencies {
    val room_version = "2.6.1"

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

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

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

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

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

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

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

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

สำหรับข้อมูลเกี่ยวกับการใช้ปลั๊กอิน KAPT โปรดดูเอกสารประกอบของ KAPT

สำหรับข้อมูลเกี่ยวกับการใช้ปลั๊กอิน KSP โปรดดูเอกสารการเริ่มต้นใช้งาน KSP อย่างรวดเร็ว

ดูข้อมูลเกี่ยวกับการใช้ส่วนขยาย Kotlin ในเอกสารประกอบของ ktx

ดูข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากร Dependency ได้ที่หัวข้อเพิ่มการอ้างอิงของบิลด์

ไม่บังคับสำหรับไลบรารีที่ไม่ใช่ Android (เช่น โมดูล Gradle ของ Java หรือ Kotlin เท่านั้น) คุณสามารถใช้ androidx.room:room-common เพื่อใช้คำอธิบายประกอบห้องแชท

การกำหนดค่าตัวเลือกคอมไพเลอร์

ห้องแชทมีตัวเลือกตัวประมวลผลคำอธิบายประกอบต่อไปนี้

room.schemaLocation directory
เปิดใช้การส่งออกสคีมาของฐานข้อมูลไปยังไฟล์ JSON ใน ไดเรกทอรี ดูการย้ายข้อมูลห้อง เพื่อดูข้อมูลเพิ่มเติม
room.incremental boolean
เปิดใช้ตัวประมวลผลคำอธิบายประกอบที่เพิ่มขึ้นของ Gradle ค่าเริ่มต้น มีค่า true
room.generateKotlin boolean
สร้างไฟล์ต้นฉบับ Kotlin แทน Java ต้องมี KSP ค่าเริ่มต้นคือ false ดูรายละเอียดเพิ่มเติมได้ในหมายเหตุเวอร์ชัน 2.6.0

ใช้ปลั๊กอิน Room Gradle

สำหรับ Room เวอร์ชัน 2.6.0 ขึ้นไป คุณใช้ปลั๊กอิน Room Gradle เพื่อ กำหนดค่าตัวเลือกสำหรับคอมไพเลอร์ห้อง โดยปลั๊กอินจะกำหนดค่าโปรเจ็กต์ในลักษณะต่อไปนี้ ที่สร้างสคีมา (ซึ่งเป็นเอาต์พุตของงานคอมไพล์และ ที่ใช้สำหรับการย้ายข้อมูลอัตโนมัติ) มีการกำหนดค่าอย่างถูกต้องให้สามารถจำลองเหตุการณ์และ บิลด์ที่แคชได้

หากต้องการเพิ่มปลั๊กอิน ในไฟล์บิลด์ Gradle ระดับบนสุด ให้ระบุ และรุ่นของปลั๊กอิน

ดึงดูด

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

Kotlin

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

ในไฟล์บิลด์ Gradle ระดับโมดูล ให้ใช้ปลั๊กอินและใช้ room ส่วนขยาย

ดึงดูด

plugins {
    id 'androidx.room'
}

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

Kotlin

plugins {
    id("androidx.room")
}

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

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

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

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

ใช้ตัวเลือกตัวประมวลผลคำอธิบายประกอบ

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

ดึงดูด

// 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 รู้เกี่ยวกับไดเรกทอรีนี้เมื่อทำการตรวจสอบล่าสุด ย้ายข้อมูลฐานข้อมูลห้อง แสดงการใช้งาน CommandLineArgumentsProvider ทั้งหมดที่ ตำแหน่งสคีมา

ความคิดเห็น

ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูที่ ปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนที่จะสร้างใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว

สร้างรายการใหม่

ดูเอกสารประกอบเกี่ยวกับเครื่องมือติดตามปัญหา เพื่อดูข้อมูลเพิ่มเติม

เวอร์ชัน 2.7

เวอร์ชัน 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. กำหนดออบเจ็กต์ที่คาดหวังที่ใช้งาน 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 ห้องโดยเพิ่ม API ใหม่ชื่อ RoomRawQuery ซึ่งคล้ายกับ SupportSQLiteQuery ในแง่ของการเก็บสตริง SQL ดิบและฟังก์ชันเพื่อเชื่อมโยงอาร์กิวเมนต์ลงในคำสั่ง ตอนนี้ฟังก์ชันที่มีคำอธิบายประกอบ @RawQuery สามารถรับ RoomRawQuery เป็นพารามิเตอร์เดี่ยวได้แล้ว (Iea844, b/330586815)
  • เพิ่ม setQueryCallback() มากเกินไปที่ยอมรับ CoroutineContext (Id66ff, b/309996304)
  • เพิ่มการรองรับเป้าหมายหลายแพลตฟอร์มของ Kotlin linuxArm64 รายการ (I139d3, b/338268719)

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

  • แก้ไขปัญหาที่ห้องแชทสร้างการเรียกไปยัง 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 มีการคอมมิตเหล่านี้

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

  • แก้ปัญหาในตัวประมวลผลคำอธิบายประกอบของห้องจะสร้างโค้ด KMP ที่ใช้ร่วมกันไม่ได้เมื่อมีการกำหนดประเภทการแสดงผลแบบหลายแผนที่ใน DAO (b/340983093)
  • แก้ไขปัญหาที่ห้องไม่พบการใช้งานฐานข้อมูลที่สร้างขึ้นหากคลาสที่มีคำอธิบายประกอบ @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 KMP ได้ในเอกสารประกอบเกี่ยวกับ KMP อย่างเป็นทางการของห้องแชท

  • การสร้างรหัส Kotlin ใน KSP เปิดอยู่โดยค่าเริ่มต้นหากการประมวลผลผ่าน KSP สำหรับโปรเจ็กต์ KAPT หรือ Java เท่านั้น Room จะยังคงสร้างซอร์สของ Java

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

  • มีการเพิ่ม Room.databaseBuilder() มากเกินไปซึ่งใช้พารามิเตอร์ lambda ที่จะใช้กับฟังก์ชันที่ห้องสร้างขึ้น เพื่อหลีกเลี่ยงการใช้การสะท้อนขณะเริ่มต้นการใช้งาน RoomDatabase ที่สร้างขึ้น ตัวอย่างการใช้งานมีดังนี้
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • เพิ่ม API สำหรับการกำหนดค่าห้องด้วย CoroutineContext ลงในเครื่องมือสร้างแล้ว: RoomDatabase.Builder.setQueryCoroutineContext โปรดทราบว่าสามารถกำหนดค่า RoomDatabase ได้เฉพาะกับผู้ดำเนินการที่ใช้ setQueryExecutor หรือด้วยบริบท Coroutine เท่านั้น โดยจะกำหนดค่าทั้ง 2 อย่างไม่ได้
  • เพิ่ม API สำหรับการกำหนดค่าห้องด้วยไดรเวอร์ SQLite แล้ว: RoomDatabase.Builder.setDriver() ดูข้อมูลเพิ่มเติมเกี่ยวกับ Driver API ของ SQLite ได้ที่เอกสารประกอบเกี่ยวกับ SQLite KMP
  • มีการเพิ่ม API สำหรับการเข้าถึง SQLiteConnection ที่สำคัญจาก API ไดรเวอร์แล้ว ซึ่งได้แก่ RoomDatabase.useReaderConnection และ RoomDatabase.useWriterConnection
  • ตอนนี้ Callback ที่เกี่ยวข้องกับ Varios Room มีเวอร์ชันที่โอเวอร์โหลดแล้ว ซึ่งได้รับ SQLiteConnection แทนที่จะเป็น SupportSQLiteDatabase โดยมีวัตถุประสงค์เพื่อลบล้างเมื่อย้ายข้อมูลไปยังโปรเจ็กต์ KMP ดูข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลการใช้ห้องในแอป Android ไปยังโมดูล KMP ทั่วไปได้ที่คำแนะนำในการย้ายข้อมูล Callback คือ
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • รวมอาร์ติแฟกต์ androidx.room:room-ktx ของ KTX กับ androidx.room:room-runtime รวมถึง API ทั้งหมดของอาร์ติแฟกต์แล้ว ตอนนี้อาร์ติแฟกต์ว่างเปล่า โปรดนำการยกเว้นดังกล่าวออกจากรายการทรัพยากร Dependency

เวอร์ชัน 2.6

เวอร์ชัน 2.6.1

29 พฤศจิกายน 2023

ปล่อย androidx.room:room-*:2.6.1 แล้ว เวอร์ชัน 2.6.1 มีคอมมิตเหล่านี้

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

  • แก้ปัญหาในโค้ดที่สร้างขึ้นซึ่งมีการตั้งค่าเริ่มต้นสำหรับคอลัมน์คู่ใน 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.generateKotlin ลงในตัวเลือกโปรเซสเซอร์สำหรับ KSP ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีส่งตัวเลือกโปรเซสเซอร์สำหรับ KSP ได้ที่เอกสารประกอบของ KSP

หมายเหตุ: โปรดทราบว่ามีการเพิ่มข้อจำกัดเพิ่มเติมเมื่อใช้ Kotlin CodeGen ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้ Abstract เป็น Getters ของ DAO หรือคำค้นหา DAO ใน Kotlin CodeGen และคาดว่าจะเขียนใหม่เป็นฟังก์ชันเพื่อหลีกเลี่ยงความเข้าใจผิดที่เป็นเท็จว่าค่าพร็อพเพอร์ตี้จะเปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่จัดเก็บไว้คงที่ ข้อจำกัดอีกประการที่เพิ่มเข้ามาคือเราไม่อนุญาตให้ใช้ประเภทผลลัพธ์คอลเล็กชันที่เป็นค่าว่างใน Room สำหรับ Kotlin CodeGen อีกต่อไป

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

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

ฟีเจอร์ใหม่

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

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

  • มีการสร้างคำอธิบายประกอบประเภทใหม่ที่ชื่อ @MapColumn เพื่อแทนที่ @MapInfo ซึ่งตอนนี้เลิกใช้งานแล้ว สำหรับแต่ละชื่อคอลัมน์ (keyColumnName, valueColumnName หรือทั้งคู่) ที่ระบุไว้ในคำอธิบายประกอบ @MapInfo คุณจะต้องประกาศคำอธิบายประกอบ @MapColumn ที่มีเพียง columnName และใช้คำอธิบายประกอบในอาร์กิวเมนต์ประเภทที่เจาะจงที่กำลังอ้างอิง (คีย์หรือค่าของแผนที่) ในประเภทการแสดงผลของฟังก์ชัน DAO ทั้งนี้เนื่องจากมีการใช้คำอธิบายประกอบ @MapColumn โดยตรงในอาร์กิวเมนต์ประเภทภายในประเภทการแสดงผลของฟังก์ชัน DAO แทนที่จะใช้ในฟังก์ชัน เช่น @MapInfo โปรดดูข้อมูลเพิ่มเติมในเอกสารประกอบ @MapColumn (Ib0305, b/203008711)
  • อัปเดตไฟล์ API เพื่อให้มีคำอธิบายประกอบสำหรับการระงับความเข้ากันได้ (I8e87a, b/287516207)
  • เราได้อัปเดต API ของปลั๊กอิน Room Gradle ให้ไม่ต้องใช้การกำหนดค่าแต่ละตัวแปรเสมอไป ซึ่งหมายความว่าปลั๊กอินสามารถยอมรับตำแหน่งส่วนกลางของตัวแปรทั้งหมดโดยไม่ต้องสร้างไดเรกทอรีหลายรายการ ทำให้การย้ายข้อมูลราบรื่นขึ้นแต่มีความยืดหยุ่นเพียงพอที่จะกำหนดค่าเวอร์ชันหรือสคีมาประเภทบิลด์ด้วยตนเอง ในขณะที่ยังคงรักษาประโยชน์ของปลั๊กอินไว้ (บิลด์ที่ทำซ้ำและแคชได้) (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 มีคอมมิตเหล่านี้

ปลั๊กอิน Room Gradle

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

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

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

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

  • ระบบกำหนดให้ RoomDatabase.QueryCallback เป็นอินเทอร์เฟซที่ใช้งานได้ซึ่งอนุญาตให้ใช้ Conversion ของ SAM (Iab8ea, b/281008549)

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

  • การแก้ไขปัญหาที่เกิดขึ้นเมื่อสร้างอินสแตนซ์ฐานข้อมูลใน Robolectric หลังจากการย้ายข้อมูลแหล่งที่มาของห้องแชทจาก Java ไปยัง Kotlin (Ic053c, b/274924903)

เวอร์ชัน 2.6.0-alpha01

22 มีนาคม 2023

ปล่อย androidx.room:room-*:2.6.0-alpha01 แล้ว เวอร์ชัน 2.6.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • การสนับสนุนคลาสสุดคุ้มใน Room for KSP Room สามารถรองรับคลาสมูลค่าในเอนทิตีแล้ว (4194095)
  • เปิดใช้การสร้างรหัส Kotlin(หรือ "Kotlin CodeGen") ในห้องแชท (4297ec0) ได้แล้ว หากต้องการเปิด Kotlin CodeGen ในห้อง ให้เพิ่มชื่อตัวเลือก room.generateKotlin ลงในตัวเลือกโปรเซสเซอร์สำหรับ KSP ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีส่งตัวเลือกโปรเซสเซอร์สำหรับ KSP ได้ที่เอกสารประกอบของ KSP

หมายเหตุ: โปรดทราบว่ามีการเพิ่มข้อจำกัดเพิ่มเติมเมื่อใช้ Kotlin CodeGen ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้ Abstract เป็น Getters ของ DAO หรือคำค้นหา DAO ใน Kotlin CodeGen และคาดว่าจะเขียนใหม่เป็นฟังก์ชันเพื่อหลีกเลี่ยงความเข้าใจผิดที่เป็นเท็จว่าค่าพร็อพเพอร์ตี้จะเปลี่ยนแปลงไม่ได้และมีผลลัพธ์ที่จัดเก็บไว้คงที่ ข้อจำกัดอีกประการที่เพิ่มเข้ามาคือเราไม่อนุญาตให้ใช้ประเภทผลลัพธ์คอลเล็กชันที่เป็นค่าว่างใน Room สำหรับ Kotlin CodeGen อีกต่อไป

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

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

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

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

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

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

  • ตอนนี้ห้องแชทจะแสดง 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/203}

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

  • room-runtime ทั้งหมดแปลงจาก Java เป็น Kotlin แล้ว (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25/606},

    หมายเหตุ: คุณอาจพบปัญหาความไม่เข้ากันของแหล่งที่มาเนื่องจากการแปลงไลบรารีเป็น Kotlin หากรหัสของคุณใช้ Kotlin และเรียกใช้ Room เวอร์ชันเก่า เวอร์ชันใหม่จะต้องจัดการกรณีเหล่านี้ ตัวอย่างเช่น การเปลี่ยนแปลงที่ทราบว่าเข้ากันไม่ได้กับแหล่งที่มาคือตอนนี้ใน InvalidationTracker คุณจะต้องประกาศ onInvalidate() ใน Observer ให้มีพารามิเตอร์ประเภท Set ไม่ใช่ MutableSet

  • เพิ่ม API สำหรับระบุชื่อตารางคีย์และค่าสำหรับชี้แจงใน @MapInfo (Icc4b5)
  • แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาต @Ignore อีกครั้งใน Getter พร็อพเพอร์ตี้ (Ifc2fb)

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

  • อัลกอริทึมการเรียนรู้เกี่ยวกับความละเอียดของคอลัมน์ซ้ำกัน ตอนนี้ "ห้อง" จะพยายามแก้ไขคอลัมน์ที่ไม่ชัดเจนในการค้นหาแบบหลายแผนที่ ซึ่งจะทำให้ JOIN ที่มีตารางที่มีตารางชื่อเดียวกันสามารถจับคู่กับออบเจ็กต์ข้อมูลผลลัพธ์ได้อย่างถูกต้อง (I4b444, b/201306012, b/212279118)

เวอร์ชัน 2.5.0-alpha01

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

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

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

  • แก้ไขปัญหาที่ไม่มีการบังคับใช้การใช้งานห้อง @IntDef ในแหล่งที่มาของ Kotlin (I75f41, b/217951311)
  • แก้ไขปัญหาความเข้ากันได้ของแหล่งที่มาเพื่ออนุญาต @Query อีกครั้งใน Getter พร็อพเพอร์ตี้ (I0a09b)
  • แปลง "ห้องพักทั่วไป" จาก 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 นี่เป็นการเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยในห้องซึ่งจะใช้แหล่งที่มา ชื่อของฟังก์ชันขณะจับคู่กับพร็อพเพอร์ตี้ในฐานะ Getters/setters (ก่อนหน้านี้คือใช้ชื่อ JVM ของฟังก์ชัน ซึ่งต่างจาก สำหรับฟังก์ชัน/พร็อพเพอร์ตี้ภายใน) หากใช้คำอธิบายประกอบ @JvmName ที่กำหนดเองเพื่อจับคู่ Getters/setters สำหรับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจาก อัปเดต (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 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาการสร้างรหัสสำหรับฟังก์ชันระงับ Dao @Transaction ซึ่งมีเนื้อความที่สร้างเมธอดอินเทอร์เฟซเริ่มต้นเนื่องจากการคอมไพล์ด้วย -Xjvm-default=all หรือค่าที่เทียบเท่า (Ia4ce5)
  • การแก้ไขข้อบกพร่องที่ห้องสร้างโค้ดสำหรับวิธีการค้นหาประเภทการแสดงผล Array<ByteArray> (If086e, b/213789489)

เวอร์ชัน 2.4.1

เวอร์ชัน 2.4.1

12 มกราคม 2022

ปล่อย androidx.room:room-*:2.4.1 แล้ว เวอร์ชัน 2.4.1 มีคอมมิตเหล่านี้

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

  • เพิ่มการรองรับพร็อพเพอร์ตี้ภายในในแหล่งที่มาของ Kotlin นี่เป็นการเปลี่ยนแปลงลักษณะการทำงานเล็กน้อยในห้องซึ่งจะใช้แหล่งที่มา ชื่อของฟังก์ชันขณะจับคู่กับพร็อพเพอร์ตี้ในฐานะ Getters/setters (ก่อนหน้านี้คือใช้ชื่อ JVM ของฟังก์ชัน ซึ่งต่างจาก สำหรับฟังก์ชัน/พร็อพเพอร์ตี้ภายใน) หากใช้คำอธิบายประกอบ @JvmName ที่กำหนดเองเพื่อจับคู่ Getters/setters สำหรับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจาก อัปเดต (If6531, b/205289020)

เวอร์ชัน 2.4.0

เวอร์ชัน 2.4.0

15 ธันวาคม 2021

ปล่อย androidx.room:room-*:2.4.0 แล้ว เวอร์ชัน 2.4.0 มีคอมมิตเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.3.0

  • การย้ายข้อมูลอัตโนมัติ: ขณะนี้ห้องแชทมี API สำหรับการสร้างการย้ายข้อมูลโดยอัตโนมัติตราบใดที่มีการส่งออกสคีมา หากต้องการให้ห้องแชททราบว่าควรสร้างการย้ายข้อมูลอัตโนมัติ พร็อพเพอร์ตี้ใหม่ @Database#autoMigrations สามารถใช้เพื่อประกาศเวอร์ชันที่จะย้ายข้อมูลไปและกลับโดยอัตโนมัติได้ เมื่อห้องแชทต้องการข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนชื่อหรือลบตารางและคอลัมน์ คำอธิบายประกอบ @AutoMigration จะประกาศคลาสข้อกำหนดที่มีอินพุตดังกล่าวได้ ดูรายละเอียดเพิ่มเติมในเอกสารประกอบเกี่ยวกับ @AutoMigration
  • การแทรกการขึ้นต่อกันในการย้ายข้อมูลอัตโนมัติ: @ProvidedAutoMigrationSpec เป็น API ใหม่สำหรับประกาศว่าจะให้บริการ AutoMigrationSpec ขณะรันไทม์ผ่าน RoomDatabase.Builder#addAutoMigrationSpec() ซึ่งจะทำให้เฟรมเวิร์กการแทรกทรัพยากร Dependency ระบุข้อกำหนดดังกล่าวได้เมื่อต้องทรัพยากร Dependency ที่ซับซ้อน
  • การสนับสนุนโปรแกรมช่วยทดสอบการย้ายข้อมูลสำหรับการย้ายข้อมูลอัตโนมัติ: MigrationTestHelper ของห้องได้รับการอัปเดตให้สนับสนุนการย้ายข้อมูลอัตโนมัติด้วย API ตัวสร้างใหม่ที่ได้รับคลาสฐานข้อมูลภายใต้การทดสอบ วิธีนี้จะช่วยให้ผู้ช่วยเพิ่มการย้ายข้อมูลอัตโนมัติได้ในลักษณะเดียวกันโดยอัตโนมัติในช่วง runMigrationsAndValidate
  • การสนับสนุนการแบ่งหน้าห้อง: เปิดตัว androidx.room:room-paging ซึ่งรองรับการแบ่งหน้า 3.0 ในเครื่องสำหรับการค้นหาห้องที่แสดง androidx.paging.PagingSource
  • วิธีการค้นหาเชิงสัมพันธ์: ขณะนี้ห้องแชทรองรับเมธอดประเภทการแสดงผลแบบหลายแผนที่ @Dao ซึ่งมีประโยชน์สำหรับคำสั่ง 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 ของห้องใน 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 ใหม่นี้ ขอแนะนำให้คุณระบุ ที่ได้รับ TypeConverters ที่ไม่เป็น null เนื่องจากเครื่องมือวิเคราะห์ใหม่สามารถ ให้รวมการตรวจสอบด้วยค่าว่าง โปรดทราบว่าการดำเนินการนี้ไม่มีผลต่อผู้ใช้ที่ใช้ KAPT หรือ Java เป็น ตัวประมวลผลคำอธิบายประกอบ (ต่างจาก KSP) ไม่มีข้อมูลความสามารถในการเว้นว่าง ในประเภทต่างๆ (Ia88f9, b/193437407)
  • แก้ไขข้อบกพร่องเมื่อห้องไม่สามารถคอมไพล์ด้วยข้อผิดพลาด 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 ที่สร้างจากการแบ่งหน้าห้องในขณะนี้ ใช้ 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 สำหรับประเภทผลตอบแทนแบบหลายแมปใน 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 (ไอแอฟ)

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

  • แก้ไขปัญหาการเรียงลำดับผลการค้นหามัลติแมปไม่ถูกต้องเมื่อคำค้นหามีอนุประโยค ORDER BY ของคอลัมน์จากคีย์ของแผนที่ (I6B887)

การสนับสนุนภายนอก

  • เพิ่ม API ใหม่เพื่อระบุลำดับดัชนีใน @ดัชนี ขอขอบคุณ Nikita Zhelonkin (I033fc)

เวอร์ชัน 2.4.0-alpha04

21 กรกฎาคม 2021

ปล่อย androidx.room:room-*:2.4.0-alpha04 แล้ว เวอร์ชัน 2.4.0-alpha04 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ขณะนี้ Room รองรับเมธอด @Dao ประเภทการแสดงผลหลายแผนที่ ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของมัลติแมปที่รองรับคือ 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 ซึ่งรองรับการแบ่งหน้า 3.0 ในเครื่องสำหรับการค้นหาห้องที่แสดง 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 ด้วยตนเองจะต้องนับรวมกับการเปลี่ยนแปลงการทํางานนี้ รวมถึง defaultKey ที่ส่งผ่านเครื่องมือสร้างของเพจเจอร์ หน้าจะเริ่มโหลดจาก Key โดยมี Key เป็นรายการแรกที่โหลด ซึ่งจะแตกต่างจากลักษณะการทำงานเดิมที่ LoadParams.Refresh.Key จะถือว่าเป็นตำแหน่งการเลื่อนของผู้ใช้และระบบจะโหลดรายการทั้งก่อนและหลังคีย์

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

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

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

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

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

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

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

  • ขณะนี้การสนับสนุน KSP ของห้องขึ้นอยู่กับ 1.5.10-1.0.0-beta01 ของ KSP แล้ว (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 ของห้องที่มีการเรียกใช้ Callback 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 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • การย้ายข้อมูลอัตโนมัติ: ขณะนี้ห้องแชทมี API สำหรับการสร้างการย้ายข้อมูลโดยอัตโนมัติตราบใดที่มีการส่งออกสคีมา หากต้องการให้ห้องแชททราบว่าควรสร้างการย้ายข้อมูลอัตโนมัติ พร็อพเพอร์ตี้ใหม่ @Database#autoMigrations สามารถใช้เพื่อประกาศเวอร์ชันที่จะย้ายข้อมูลไปและกลับโดยอัตโนมัติได้ เมื่อห้องแชทต้องการข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนชื่อหรือลบตารางและคอลัมน์ คำอธิบายประกอบ @AutoMigration จะประกาศคลาสข้อกำหนดที่มีอินพุตดังกล่าวได้ ดูรายละเอียดเพิ่มเติมในเอกสารประกอบของ @AutoMigration

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

  • แก้ไขปัญหาที่ defaultValue ที่มีวงเล็บเกินได้รับการตรวจสอบอย่างไม่ถูกต้องจากการตรวจสอบสคีมาของห้อง 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 อยู่แล้ว ห้องจะจัดลำดับความสำคัญให้ใช้เครื่องมือดังกล่าวแทนตัวเลือกเริ่มต้น
  • การติดต่อกลับจากคำค้นหา: ขณะนี้ห้องแชทมี API การติดต่อกลับทั่วไป RoomDatabase.QueryCallback สำหรับเมื่อมีการเรียกใช้คำค้นหา ซึ่งอาจเป็นประโยชน์สำหรับการเข้าสู่ระบบบิลด์การแก้ไขข้อบกพร่อง คุณตั้งค่าการติดต่อกลับผ่าน RoomDatabase.Builder#setQueryCallback() ได้
  • การปรับปรุงแพ็กเกจล่วงหน้า: ตอนนี้ห้องแชทมี API สำหรับการสร้างฐานข้อมูลโดยใช้ฐานข้อมูลที่บรรจุแพ็กเกจไว้ล่วงหน้าซึ่งอ่านจากสตรีมอินพุต ซึ่งจะช่วยในกรณีต่างๆ เช่น เมื่อฐานข้อมูลก่อนแพ็กเกจถูกบีบอัดด้วย gzip
  • จัดทำ Type Converters: ขณะนี้ Room มี API สำหรับให้อินสแตนซ์ของตัวแปลงประเภท เพื่อให้แอปควบคุมการเริ่มต้นได้ หากต้องการทำเครื่องหมายตัวแปลงประเภทที่จะมีให้สำหรับห้อง ให้ใช้คำอธิบายประกอบใหม่ @ProvidedTypeConverter
  • การสนับสนุน RxJava3: ขณะนี้ห้องแชทรองรับประเภท RxJava3 แล้ว เช่นเดียวกับ RxJava2 คุณสามารถประกาศเมธอด DAO ซึ่งมีประเภทผลลัพธ์เป็น Flowable, Single, Never และ Completable นอกจากนี้ยังมีอาร์ติแฟกต์ androidx.room:room-rxjava3 ใหม่เพื่อรองรับ RxJava3
  • การรองรับหน้า 3.0: ขณะนี้ห้องแชทจะรองรับการสร้างการใช้งานสำหรับเมธอดที่มีคำอธิบายประกอบ @Query ซึ่งมีประเภทการแสดงผลเป็น androidx.paging.PagingSource

เวอร์ชัน 2.3.0-rc01

24 มีนาคม 2021

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

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

  • แก้ไขปัญหาที่ป้องกันไม่ให้การค้นหาโฟลว์ Coroutine ที่สร้างโดยห้องใช้งานในบล็อก 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)

การสนับสนุนภายนอก

  • อนุญาตให้ห้องแชทยอมรับประเภทการแสดงผล 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 KSP

    KSP จะแทนที่ KAPT ในการเรียกใช้ตัวประมวลผลคำอธิบายประกอบบนคอมไพเลอร์ Kotlin โดยตรง ซึ่งช่วยลดเวลาในการสร้างได้อย่างมาก

    หากต้องการใช้ห้องแชทกับ 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 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ฐานข้อมูลที่ปิดอัตโนมัติ: ตอนนี้ห้องแชทสามารถปิดฐานข้อมูลที่ไม่มีการเข้าถึงหลังจากผ่านไประยะหนึ่งแล้ว ฟีเจอร์นี้อยู่ในขั้นทดลองและเปิดใช้งานได้โดยโทรหา 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 อยู่แล้ว ห้องจะจัดลำดับความสำคัญให้ใช้เครื่องมือดังกล่าวแทนตัวเลือกเริ่มต้น (b/73132006)

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

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

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

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

การสนับสนุนภายนอก

  • ตอนนี้ห้องแชทจะใช้ beginTransactionNonExclusive โดยค่าเริ่มต้นหากเปิดใช้โหมด WAL และ API ระดับ 16 ขึ้นไป ขอขอบคุณ ‘Ahmed I. คาลิล | ahmedibrahimkhali@gmail.com’! (b/126258791)

เวอร์ชัน 2.3.0-alpha03

14 ตุลาคม 2020

ปล่อย androidx.room:room-*:2.3.0-alpha03 แล้ว เวอร์ชัน 2.3.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ Room มี API สำหรับระบุอินสแตนซ์ของตัวแปลงประเภทเพื่อให้แอปควบคุมการเริ่มต้นได้ หากต้องการทำเครื่องหมายเครื่องมือแปลงประเภทซึ่งจะมีให้ในห้อง ให้ใช้คำอธิบายประกอบใหม่ @ProvidedTypeConverter ขอขอบคุณ "mzgreen yairobbe@gmail.com" (Ie4fa5, b/121067210)

  • ขณะนี้ห้องแชทมี 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 ด้วยประเภทขั้นสูงทั่วไปที่มี "Primitives" ของ Kotlin (Ice6bb, b/160258066)

  • อัปเดตเอกสารประกอบเกี่ยวกับการเพิ่ม/นำวิธีการของผู้สังเกตการณ์ออกเพื่อชี้แจงการแยกชุดข้อความ (Ifd1d9, b/153948821)

  • แก้ไขปัญหาที่ห้องมีการตรวจสอบตาราง FTS ที่ประกาศคอลัมน์แถวแนวนอนอย่างไม่ถูกต้อง (d62ebc, b/145858914)

การสนับสนุนภายนอก

  • แก้ไขปัญหาเกี่ยวกับภาษาตุรกี (5746e3), b/68159494

  • แทนที่ ConcurrentHashMap ใน RoomDatabase ด้วย Collections.synchronizedMap() เพื่อหลีกเลี่ยงปัญหาใน Android Lollipop (d1cfc7, b/162431855)

  • เพิ่ม onOpenPrepackagedDatabase callback เมื่อมีการใช้แพ็กเกจล่วงหน้า คัดลอกฐานข้อมูลแล้ว (I1ba74, b/148934423)

เวอร์ชัน 2.3.0-alpha02

22 กรกฎาคม 2020

ปล่อย androidx.room:room-*:2.3.0-alpha02 แล้ว เวอร์ชัน 2.3.0-alpha02 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • การสนับสนุน RxJava3: ขณะนี้ห้องแชทรองรับประเภท RxJava3 แล้ว เช่นเดียวกับ RxJava2 คุณสามารถประกาศเมธอด DAO ซึ่งมีประเภทผลลัพธ์เป็น Flowable, Single, Never และ Completable นอกจากนี้ยังมีอาร์ติแฟกต์ androidx.room:room-rxjava3 ใหม่เพื่อรองรับ RxJava3 (b/152427884)

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

  • รองรับการประกาศ @TypeConverter ในคลาส Kotlin Object แล้ว (b/151110764)
  • ตอนนี้ตัวเลือกการประมวลผลคำอธิบายประกอบที่เพิ่มขึ้นของห้องแชทเปิดอยู่โดยค่าเริ่มต้น (b/112110217)

เวอร์ชัน 2.3.0-alpha01

10 มิถุนายน 2020

ปล่อย androidx.room:room-*:2.3.0-alpha01 แล้ว เวอร์ชัน 2.3.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • การรองรับหน้า 3.0: ขณะนี้ห้องแชทจะรองรับการสร้างการใช้งานสำหรับ @Query เมธอดที่มีคำอธิบายประกอบซึ่งมีประเภทการแสดงผลเป็น androidx.paging.PagingSource

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

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

  • @RewriteQueriesToDropUnusedColumns เป็นคำอธิบายประกอบใหม่เพื่อความสะดวก ซึ่งทำให้ห้องเขียนการฉายภาพ "*" ใหม่ในการค้นหาเพื่อนำคอลัมน์ที่ไม่ได้ใช้ในผลการค้นหาออก
  • ตัวเลือกโปรเซสเซอร์ room.expandProjection เลิกใช้งานแล้วในตอนนี้ ใช้ @RewriteQueriesToDropUnusedColumns เพื่อแทนที่การค้นหาที่มีการเพิ่มประสิทธิภาพสำหรับห้องด้วยการฉายดาว โปรดทราบว่า @RewriteQueriesToDropUnusedColumns ไม่ได้แทนที่โซลูชันความขัดแย้งของคอลัมน์ room.expandProjection ที่เสนอเกี่ยวกับประเภทการแสดงผลที่มีช่อง @Embedded

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

  • แก้ไขข้อบกพร่องที่ Room ตรวจไม่พบเวอร์ชัน JDK ที่ใช้เปิดใช้ตัวประมวลผลคำอธิบายประกอบที่เพิ่มขึ้นอย่างถูกต้อง ขอขอบคุณ Blaz Solar (me@blaz.solar) (b/155215201)
  • ตอนนี้ Room ได้ฝังทรัพยากร Dependency ของ 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 ในตัวประมวลผลคำอธิบายประกอบสำหรับห้องที่จะทำให้คอมไพเลอร์ขัดข้องเนื่องจากมีการคอมไพล์แบบขนาน (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 มีคอมมิตเหล่านี้

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

  • แก้ไขข้อบกพร่องที่ห้องแชทไม่สามารถตรวจสอบฐานข้อมูลที่ยังไม่ได้ผ่านการย้ายข้อมูลและมีแฮชเดิมที่มีดัชนีในสคีมา (b/139306173)

เวอร์ชัน 2.2.2

เวอร์ชัน 2.2.2

20 พฤศจิกายน 2019

ปล่อย androidx.room:room-*:2.2.2 แล้ว เวอร์ชัน 2.2.2 มีคอมมิตเหล่านี้

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

  • แก้ไขข้อบกพร่องที่การรวบรวมความสัมพันธ์แบบหนึ่งต่อหนึ่งที่มีมากกว่า 999 แถวจะทำให้ห้องแชทแสดงรายการที่เกี่ยวข้องแบบ Null (b/143105450)

เวอร์ชัน 2.2.1

เวอร์ชัน 2.2.1

23 ตุลาคม 2019

ปล่อย androidx.room:room-*:2.2.1 แล้ว เวอร์ชัน 2.2.1 มีคอมมิตเหล่านี้

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

  • แก้ไขข้อบกพร่องที่ห้องแชทจะแจ้งเตือนเกี่ยวกับ 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() จะใช้เมื่อไฟล์ฐานข้อมูลที่สร้างไว้ล่วงหน้าอยู่ใน โฟลเดอร์ Asset ของ APK ส่วน createFromFile() จะใช้เมื่อไฟล์นั้น ในสถานที่ที่กำหนดเอง การใช้งาน API เหล่านี้จะเปลี่ยนลักษณะการทำงานของ ในการย้ายข้อมูลที่ก่อให้เกิดความเสียหาย ซึ่งในระหว่างการย้ายข้อมูลสำรอง ห้องจะพยายาม เพื่อคัดลอกฐานข้อมูลที่สร้างไว้ล่วงหน้าอีกครั้ง ถ้ามี มิฉะนั้นจะสำรองเป็น ลบและสร้างตารางทั้งหมดขึ้นมาใหม่ 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: ตอนนี้เมธอด DAO ของ @Query สามารถเป็นประเภทการแสดงผล Flow<T> ได้แล้ว โฟลว์ที่แสดงผลจะสร้างชุดค่าใหม่อีกครั้งหากตารางการสังเกตการณ์ใน การค้นหาใช้ไม่ได้ การประกาศฟังก์ชัน DAO ที่มีผลตอบแทน Channel<T> type มีข้อผิดพลาด ห้องจะสนับสนุนให้คุณใช้ Flow จากนั้นใช้ ฟังก์ชันใกล้เคียงที่จะแปลง Flow เป็น Channel b/130428884
  • ตัวประมวลผลคำอธิบายประกอบส่วนเพิ่มของ Gradle: ขณะนี้ฟีเจอร์ห้องแชทแยกแบบ 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 จะหยุดเรียกใช้ค่าใหม่หลังจากผ่านไประยะหนึ่ง (b/139175786)
  • แก้ไขข้อบกพร่องที่ห้องแชทไม่ยอมรับรหัสแฮชของสคีมาเดิมขณะเปิดฐานข้อมูลที่ไม่ได้ย้ายข้อมูลตั้งแต่ห้อง 1.0 ซึ่งทำให้เกิดข้อขัดข้องรันไทม์เนื่องจากสคีมาไม่ถูกต้อง (b/139306173)

เวอร์ชัน 2.2.0-alpha02

7 สิงหาคม 2019

ปล่อย androidx.room:room-*:2.2.0-alpha02 แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ฟีเจอร์ใหม่

  • โฟลว์Coroutines: ตอนนี้เมธอด DAO ของ @Query สามารถเป็นประเภทการแสดงผล Flow<T> ได้แล้ว โฟลว์ที่แสดงผลจะสร้างชุดค่าใหม่อีกครั้งหากตารางการสังเกตการณ์ใน การค้นหาใช้ไม่ได้ การประกาศฟังก์ชัน DAO ที่มีผลตอบแทน Channel<T> type มีข้อผิดพลาด ห้องจะสนับสนุนให้คุณใช้ 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 คือ Callback API ใหม่ที่เพิ่มลงใน RoomDatabase.Callback สำหรับเวลาที่ห้องย้ายฐานข้อมูลอย่างไม่เหมาะสม b/79962330

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

  • แก้ไขข้อบกพร่องที่ห้องจะสร้างรหัสที่ไม่ถูกต้องโดยใช้เมธอดเป็นช่อง ตัวตั้งค่าเมื่อช่องได้รับการป้องกัน b/136194628
  • แก้ไขข้อบกพร่องที่ทำให้ DocumentationTracker แสดงผล NPE ในไม่กี่วินาที กระบวนการเมื่อเปิดใช้การทำให้เป็นโมฆะแบบหลายอินสแตนซ์และการทำให้เป็นโมฆะ บริการหยุดทำงาน b/137454915
  • แก้ไขข้อบกพร่องที่ "ห้องพัก" ระบุประเภทการส่งคืนไม่ถูกต้อง รับค่าฟังก์ชันการระงับที่มีหมายเหตุ @RawQuery b/137878827
  • อัปเดตโค้ดที่สร้างขึ้นสำหรับ @Relation เมื่อคีย์ที่เกี่ยวข้องเป็นประเภท BLOB เพื่อใช้ ByteBuffer ที่เทียบเคียงได้ b/137881998
  • แก้ไขข้อบกพร่องที่ Room จะร้องเรียนเกี่ยวกับตัวตั้งค่าที่หายไปใน POJO ซึ่งใช้เป็น พารามิเตอร์เอนทิตีบางส่วนของ @Insert, @Update และ @Delete b/138664463
  • แก้ไขข้อบกพร่องที่ Room จะร้องเรียนเกี่ยวกับผู้สูญหายและ ตัวตั้งค่าสำหรับ ละเว้นคอลัมน์ผ่าน @Entity เมื่อมีการใช้คลาสเอนทิตีใน DAO บางรายการ b/138238182
  • แก้ไขข้อบกพร่องที่ Room ไม่แปลงอาร์กิวเมนต์การเชื่อมโยงที่มีชื่อเป็น อาร์กิวเมนต์ตำแหน่งที่ทำให้เกิดข้อยกเว้นรันไทม์เมื่อดำเนินการค้นหาด้วย พารามิเตอร์ที่ใช้ซ้ำ b/137254857

เวอร์ชัน 2.2.0-alpha01

10 กรกฎาคม 2019

ฟีเจอร์ใหม่

  • ฐานข้อมูลที่จัดทำแพ็กเกจไว้ล่วงหน้า: ตอนนี้ API ใหม่ 2 รายการใน RoomDatabase.Builder ได้รับการใช้แล้ว พร้อมสำหรับการสร้าง RoomDatabase จากฐานข้อมูลที่มีการป้อนข้อมูลอยู่แล้ว createFromAsset() จะใช้เมื่อไฟล์ฐานข้อมูลที่สร้างไว้ล่วงหน้าอยู่ใน โฟลเดอร์ Asset ของ APK ส่วน createFromFile() จะใช้เมื่อไฟล์นั้น ในสถานที่ที่กำหนดเอง การใช้งาน API เหล่านี้จะเปลี่ยนลักษณะการทำงานของ ในการย้ายข้อมูลที่ก่อให้เกิดความเสียหาย ซึ่งในระหว่างการย้ายข้อมูลสำรอง ห้องจะพยายาม เพื่อคัดลอกฐานข้อมูลที่สร้างไว้ล่วงหน้าอีกครั้ง ถ้ามี มิฉะนั้นจะสำรองเป็น ลบและสร้างตารางทั้งหมดขึ้นมาใหม่ 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: ขณะนี้ฟีเจอร์ห้องแชทแยกแบบ Gradle ตัวประมวลผลคำอธิบายประกอบและความสามารถในการเพิ่มค่าสามารถเปิดใช้ได้ผ่านโปรเซสเซอร์ ตัวเลือก room.incremental โปรดดู ตัวเลือกคอมไพเลอร์ห้อง เพื่อดูข้อมูลเพิ่มเติม หากพบปัญหา โปรดส่ง ที่นี่ เราวางแผนที่จะเปิดใช้ความสามารถในการเพิ่มขึ้นโดยค่าเริ่มต้นสำหรับเวอร์ชันเสถียรในอนาคต b/112110217

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

  • ห้องแชทจะไม่เผยแพร่ EmptySetResultException ไปยัง ตัวแฮนเดิลข้อผิดพลาดส่วนกลางเมื่อสตรีม Rx ของคำค้นหาถูกกำจัดไปแล้วก่อน การค้นหาเสร็จสมบูรณ์ b/130257475
  • แก้ไขข้อบกพร่องที่ห้องแสดงข้อความแสดงข้อผิดพลาดที่ไม่ถูกต้องเมื่อมีการระงับ ฟังก์ชัน DAO ที่มีคำอธิบายประกอบด้วย @RawQuery ไม่มีประเภทการแสดงผล b/134303897
  • Room จะไม่สร้างอะแดปเตอร์ DAO ที่มีประเภทข้อมูลดิบอีกต่อไป b/135747255

เวอร์ชัน 2.1.0

เวอร์ชัน 2.1.0

13 มิถุนายน 2019

ปล่อยห้อง 2.1.0 แล้วโดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-rc01 คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

การเปลี่ยนแปลงที่สำคัญตั้งแต่ 2.0.0

  • FTS: Room รองรับเอนทิตีที่มีการแมปแล้ว ตาราง FTS3 หรือ FTS4 ชั้นเรียนที่มีคำอธิบายประกอบ @Entity สามารถมีคำอธิบายประกอบเพิ่มเติมด้วย @Fts3 หรือ @Fts4 เพื่อประกาศได้แล้ว ชั้นเรียนที่มีตารางการค้นหาข้อความแบบเต็ม ตัวเลือก FTS สำหรับข้อมูลเพิ่มเติม สามารถปรับแต่งได้ผ่านเมธอดของคำอธิบายประกอบ
  • ข้อมูลพร็อพเพอร์ตี้: ขณะนี้ห้องแชทรองรับการประกาศชั้นเรียนเป็นการค้นหาที่จัดเก็บไว้ หรือที่รู้จักกัน เป็นข้อมูลพร็อพเพอร์ตี้ โดยใช้ คำอธิบายประกอบ @DatabaseView
  • Couroutines: เมธอด DAO สามารถระงับฟังก์ชันได้แล้ว รวม room-ktx ในทรัพยากร Dependency เพื่อใช้ประโยชน์จากฟังก์ชันนี้ อาร์ติแฟกต์ ktx ยังมีฟังก์ชันของส่วนขยาย RoomDatabase.withTransaction สำหรับ ดำเนินธุรกรรมฐานข้อมูลภายในโคโรทีน
  • ค่าอัตโนมัติ: ห้องแชทรองรับการประกาศค่าแล้ว ค่าอัตโนมัติ ใส่คำอธิบายประกอบคลาสเป็นเอนทิตีและ POJO คำอธิบายประกอบห้องแชท @PrimaryKey ประกาศ @ColumnInfo, @Embedded และ @Relation ใน Auto ได้แล้ว วิธีการเชิงนามธรรมของคลาสที่มีคำอธิบายประกอบ โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้อง จะแสดงร่วมกับ @CopyAnnotations เพื่อให้ Room เข้าใจได้อย่างถูกต้อง
  • การสนับสนุนแบบไม่พร้อมกันเพิ่มเติม: เมธอด DAO ที่มีคำอธิบายประกอบ @Insert, @Delete หรือ @Update พร้อมด้วย @Query ที่มี INSERT, DELETE หรือ UPDATE คำสั่ง ตอนนี้รองรับประเภทการคืนสินค้า Rx Completable, Single, Maybe, และ Guava ประเภท ListenableFuture และสามารถระงับ
  • 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
  • แก้ไขบั๊กที่ RemoveationTracker ทำให้เกิดข้อขัดข้องเมื่อ การตรวจสอบการโมฆะจะเกิดขึ้นพร้อมกัน 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 เป็นรีซีฟเวอร์อีกต่อไป การดำเนินการนี้จะป้องกันไม่ให้มีการข้าม Wrapper เพิ่มเติม coroutineScope { } ที่จำเป็นสำหรับการใช้งานต่างๆ ในบล็อกธุรกรรมพร้อมกัน

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

  • แก้ไขข้อบกพร่องที่ Room จับคู่กับ TypeConverter สำหรับ Kotlin DAO ไม่ได้ ที่มีพารามิเตอร์ประเภทคอลเล็กชัน b/122066791

เวอร์ชัน 2.1.0-alpha06

22 มีนาคม 2019

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

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

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

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

เวอร์ชัน 2.1.0-alpha05

13 มีนาคม 2019

ฟีเจอร์ใหม่

  • ฟังก์ชันของส่วนขยาย RoomDatabase.withTransaction ช่วยให้คุณทำธุรกรรมฐานข้อมูลภายในโครูทีนได้อย่างปลอดภัย ฟังก์ชันส่วนขยายห้องพัก รวมถึงการรองรับโครูทีน (Coroutine) พร้อมใช้งานในอาร์ติแฟกต์ room-ktx
  • เมธอด DAO แบบไม่เป็นนามธรรมที่มีคำอธิบายประกอบด้วย @Transaction สามารถระงับฟังก์ชันได้แล้ว b/120241587

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

  • เปลี่ยนชื่ออาร์ติแฟกต์ room-coroutines เป็น room-ktx แล้วเป็นชื่อเดียวกับอาร์ติแฟกต์ androidx อื่นๆ
  • beginTransaction, setTransactionSuccessful และ endTransaction ใน RoomDatabase เลิกใช้งานแล้วเพื่อใช้ runInTransaction และฟังก์ชัน withTransaction ของส่วนขยาย room-ktx แทน

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

  • แก้ไขข้อบกพร่องที่มีการตัดอาร์กิวเมนต์ตัวโทเค็น หากเครื่องมือแปลงข้อมูลเป็นโทเค็น SIMPLE b/125427014
  • แก้ไขข้อบกพร่องที่ "ห้อง" ระบุฟังก์ชันการระงับอย่างไม่ถูกต้องด้วยพารามิเตอร์ที่ประเภทเป็นคลาสภายใน b/123767877
  • แก้ไขข้อบกพร่องที่เลื่อนเมธอด @Query DAO ที่มีคำสั่ง INSERT, UPDATE หรือ DELETE เตรียมคำค้นหาในเทรดหลักอย่างตั้งใจ b/123695593
  • แก้ไขข้อบกพร่องต่างๆ ที่ Room จะสร้างโค้ดที่ไม่ถูกต้องสำหรับฟังก์ชันการระงับบางอย่าง b/123466702 และ b/123457323
  • แก้ไขข้อบกพร่องที่ไม่มีการระงับการใช้วิธีการที่เลิกใช้งานแล้วอย่างถูกต้องในโค้ดที่สร้างขึ้น b/117602586
  • อัปเดตทรัพยากร Dependency ของห้องของ androidx.sqlite เป็น 1.0.2 ซึ่งมีการแก้ไขสำหรับการจัดการฐานข้อมูลที่เสียหายอย่างถูกต้อง b/124476912

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

  • ห้อง 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 / ลักษณะการทำงาน

  • ตอนนี้ห้องแชทจะแสดงข้อผิดพลาดหากเมธอด DAO แบบไม่เป็นนามธรรมที่มีคำอธิบายประกอบด้วย @Transaction แสดงผลประเภทอะซิงโครนัส เช่น Single, Mayble, Completable, LiveData หรือ ListenableFuture เนื่องจากธุรกรรมถูกจํากัดระดับเทรด ปัจจุบันห้องแชทจึงเริ่มและสิ้นสุดธุรกรรมเกี่ยวกับฟังก์ชันที่อาจสร้างการค้นหาในชุดข้อความต่างๆ ไม่ได้ b/120109336
  • OnConflictStrategy.FAIL และ OnConflictStrategy.ROLLBACK ได้รับ @Deprecated เนื่องจากไม่ทำงานตามที่คาดหวังกับการเชื่อมโยง SQLite ปัจจุบันของ Android b/117266738

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

  • แก้ไขข้อบกพร่องที่ Room ไม่ใช้ TypeConverter ในประเภทการแสดงผลอย่างถูกต้อง หากเมธอด DAO เป็นฟังก์ชันระงับ b/122988159
  • แก้ไขข้อบกพร่องที่ "ห้อง" ระบุอย่างไม่ถูกต้องว่าฟังก์ชันการระงับที่รับค่ามาเป็น "ไม่ระงับ" b/122902595
  • แก้ไขข้อบกพร่องที่ห้องแชทจะสร้างรหัสไม่ถูกต้องเมื่อช่อง @Embedded อยู่ในชั้นเรียนระดับบนสุดและใช้ในชั้นเรียนย่อยหลายชั้นเรียน b/121099048
  • แก้ไขปัญหาที่ฐานข้อมูลจะติดตายเมื่อเรียกใช้ DAO ระงับฟังก์ชันระหว่าง beginTransaction() ถึง endTransaction() b/120854786

เวอร์ชัน 2.1.0-alpha03

4 ธันวาคม 2018

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

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

ฟีเจอร์ใหม่

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

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

  • แก้ไขข้อบกพร่องที่ห้องพยายามค้นหาเครื่องมือสร้างที่มีคอลัมน์ในพร็อพเพอร์ตี้ ignoredColumns ของ @Entity อย่างไม่ถูกต้อง b/119830714
  • แก้ไขข้อบกพร่องที่ Room ไม่ทำเครื่องหมายพารามิเตอร์เมธอด DAO ว่าเป็นพารามิเตอร์สุดท้ายในการใช้งานที่สร้างขึ้น b/118015483
  • แก้ไขข้อบกพร่องที่ตัวประมวลผลของห้องขัดข้องเมื่อรายงานข้อผิดพลาดในการค้นหาที่มีสัญลักษณ์พิเศษ b/119520136
  • แก้ไขข้อบกพร่องที่ห้องจะปฏิเสธการใช้งาน Collection อื่นๆ ที่เป็นอาร์กิวเมนต์ของนิพจน์ IN b/119884035
  • แก้ไขข้อบกพร่องที่ LiveData ส่งคืนจากห้องเมื่อมีการเก็บขยะเมื่อสังเกตการณ์ตลอดไป ซึ่งทำให้ไม่ปล่อยข้อมูลใหม่อีก 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
  • อัปเดตโปรแกรมแยกวิเคราะห์ไวยากรณ์ SQLite ของห้องแล้ว ซึ่งช่วยแก้ไขปัญหาด้านประสิทธิภาพที่อาจทำให้ใช้เวลาสร้างนาน b/117401230

เวอร์ชัน 2.1.0-alpha01

8 ตุลาคม 2018

ฟีเจอร์ใหม่

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

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

  • mCallback และ mDatabase ใน RoomDatabase เปลี่ยนเป็น @Deprecated แล้ว และจะนําออกในห้องแชทเวอร์ชันหลักถัดไป b/76109329

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

  • แก้ไขปัญหา 2 ข้อที่ห้องแชทไม่สามารถกู้คืนได้อย่างถูกต้องจากฐานข้อมูลที่เสียหาย หรือการย้ายข้อมูลที่ไม่ดีระหว่างการเริ่มต้น 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 ให้ใส่ทรัพยากร Dependency ต่อไปนี้

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 เราขอเรียนให้ทราบว่า เราขอแนะนำให้ใช้ห้อง 1.1.1-rc1 แทน 1.1.0 หากคุณใช้การย้ายข้อมูล

แก้ไขข้อบกพร่องที่ห้องแชทไม่จัดการหลังการเริ่มต้นการย้ายข้อมูลอย่างถูกต้องb/79362399

เวอร์ชัน 1.1.0

เวอร์ชัน 1.1.0-beta3

19 เมษายน 2018

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

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

เวอร์ชัน 1.1.0-beta2

5 เมษายน 2018

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

  • แก้ไขข้อบกพร่องร้ายแรงในการใช้งาน Rx Single และ 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
  • การแบ่งหน้า: การติดตั้งใช้งานแหล่งข้อมูลของห้องจะจัดการทรัพยากร Dependency แบบหลายตารางได้อย่างถูกต้องแล้ว (เช่น ความสัมพันธ์และการรวม) ซึ่งก่อนหน้านี้จะทำให้ทริกเกอร์ผลลัพธ์ใหม่ไม่สำเร็จหรือคอมไพล์ไม่สำเร็จ 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 รุ่นใหม่ (อัลฟ่า-4+) และไม่รองรับ API ที่เลิกใช้งานแล้ว LivePagedListProvider หากต้องการใช้ห้องแชทอัลฟ่าแบบใหม่ คุณจะต้องใช้การแบ่งหน้า alpha-4 ขึ้นไป และเปลี่ยนจาก LivePagedListProvider เป็น LivePagedListBuilder หากยังไม่ได้ดำเนินการ

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

  • ปรับปรุงการรองรับประเภท Kotlin Kapt b/69164099
  • ลำดับของช่องไม่ทำให้สคีมาเป็นโมฆะอีกต่อไป b/64290754