ห้อง

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

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

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

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

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

Kotlin

dependencies {
    val room_version = "2.6.1"

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

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

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("androidx.room:room-compiler:$room_version")

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

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

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

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

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

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

Groovy

dependencies {
    def room_version = "2.6.1"

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

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

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor "androidx.room:room-compiler:$room_version"

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

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

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

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

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

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

ดูข้อมูลเกี่ยวกับการใช้ปลั๊กอิน KSP ได้ที่เอกสารประกอบเริ่มต้นใช้งาน KSP

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

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

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

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

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

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

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

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

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

Groovy

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

Kotlin

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

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

Groovy

plugins {
    id 'androidx.room'
}

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

Kotlin

plugins {
    id("androidx.room")
}

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

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

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

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

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

หากคุณไม่ได้ใช้ปลั๊กอิน 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.7

เวอร์ชัน 2.7.0-alpha12

11 ธันวาคม 2024

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

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

  • เพิ่ม API เวอร์ชันทดลอง RoomDatabase.Builder.setInMemoryTrackingMode() เพื่อกำหนดค่าว่า Room จะใช้ตารางในหน่วยความจำหรือไม่สำหรับการติดตามการลบล้าง (I2a9b2, b/185414040)

การแก้ไขข้อบกพร่อง - ตอนนี้การย้ายข้อมูลแบบทำลายล้างจะทิ้งมุมมองเพื่อให้ระบบสร้างมุมมองขึ้นมาใหม่ โดยปรับให้ลักษณะการทำงานเมื่อ allowDestructiveMigrationForAllTables เปิดอยู่ (ค่าเริ่มต้นของ KMP) สอดคล้องกับลักษณะการทำงานที่มีอยู่เมื่อปิดอยู่ (0a3e83, b/381518941)

เวอร์ชัน 2.7.0-alpha11

30 ตุลาคม 2024

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

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

  • กลับไปดูลายเซ็นเมธอด convertRows() ที่เพิ่มใหม่ให้เป็นฟังก์ชันการระงับที่ได้รับ RawRoomQuery สําหรับการแบ่งหน้าห้อง (Ie57b5, b/369136627)

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

  • แก้ไขปัญหาในการจัดเรียงหน้าของห้องซึ่งระบบจะสร้างโค้ดที่ไม่ถูกต้องเมื่อใช้ @Relation ร่วมกับ PagingSource

เวอร์ชัน 2.7.0-alpha10

16 ตุลาคม 2024

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

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

  • สร้างคลาส ByteArrayWrapper ภายในเพื่อรองรับความสัมพันธ์กับ ByteBuffer ในแพลตฟอร์มที่ไม่ใช่ Android และไม่ใช่ JVM (I75543, b/367205685)
  • เพิ่ม SQLiteStatement.getColumnType() พร้อมกับค่าคงที่ผลลัพธ์ SQLITE_DATA_* ต่างๆ เพื่อเปิดใช้การดึงข้อมูลประเภทของคอลัมน์ (I1985c, b/369636251)

เวอร์ชัน 2.7.0-alpha09

2 ตุลาคม 2024

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

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

  • แก้ไขปัญหาการติดตั้งใช้งาน room-paging ของ KMP ซึ่งจะทำให้เกิด Error code: 8, message: attempt to write a readonly database เนื่องจากการเริ่มธุรกรรมการเขียนในการเชื่อมต่อการอ่าน (b/368380988)

เวอร์ชัน 2.7.0-alpha08

18 กันยายน 2024

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

ฟีเจอร์ใหม่

  • ย้ายข้อมูลอาร์ติแฟกต์ room-paging เพื่อให้เข้ากันได้กับ KMP แล้ว (Ib8756, b/339934824)
  • API invalidationTrackerFlow() ได้กลายเป็น API ของบุคคลที่หนึ่งอย่าง InvalidationTracker.createFlow() และพร้อมใช้งานสำหรับชุดแหล่งที่มาที่ไม่ใช่ Android ในโปรเจ็กต์ KMP แล้ว (I1fbfa, (I8fb29), b/329291639, b/329315924)

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

  • เราได้นําคําเตือนและข้อความแสดงข้อผิดพลาดทั้งหมดใน Room ที่ใช้คําว่า Cursor ออกหรือแทนที่ด้วยคําอื่นแล้ว เนื่องจาก Cursor ไม่ใช่คําทั่วไปที่ถูกต้องสําหรับใช้ใน Room เวอร์ชัน KMP อีกต่อไป (Id8cd9, b/334087492)

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

  • แก้ไขปัญหาที่ Room KMP จะพยายามแสดงโค้ดโดยใช้ UUID สำหรับแพลตฟอร์มที่ไม่ใช่ JVM (b/362994709)
  • แก้ไขปัญหาเกี่ยวกับปลั๊กอิน Gradle ของ Room ที่ทำให้เกิดข้อผิดพลาด เช่น "เปลี่ยนแอตทริบิวต์ของการกำหนดค่าไม่ได้ … หลังจากที่มีการล็อกเพื่อการเปลี่ยนแปลง" เมื่อใช้ในโปรเจ็กต์ KMP ที่มี Compose Multiplatform (b/343408758)

เวอร์ชัน 2.7.0-alpha07

21 สิงหาคม 2024

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

ฟีเจอร์ใหม่

  • ตอนนี้ปลั๊กอิน Gradle ของ Room จะเพิ่มสคีมาแบบส่งออกลงในแหล่งข้อมูลการทดสอบเครื่องมือวัดประสิทธิภาพของ Android โดยอัตโนมัติเพื่อให้ MigrationTestHelper นำไปใช้ได้

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

  • แก้ไขปัญหาเกี่ยวกับ "จริง" ที่สร้างขึ้นของ RoomDatabaseConstructor ที่ไม่มีตัวแก้ไข "จริง" ในฟังก์ชัน initialize หากมีการลบล้างฟังก์ชันดังกล่าวในการประกาศ "คาดหวัง" ด้วย (359631627)
  • แก้ไขปัญหาเกี่ยวกับ "จริง" ที่สร้างขึ้นของ RoomDatabaseConstructor ไม่ตรงกับระดับการเข้าถึงของประกาศ "คาดหวัง" (358138953)

เวอร์ชัน 2.7.0-alpha06

7 สิงหาคม 2024

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

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

  • เปลี่ยนการตั้งค่าการสร้างอินสแตนซ์สําหรับ RoomDatabase ในโปรเจ็กต์ KMP

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

  1. กําหนดออบเจ็กต์การคาดหวังที่ใช้ RoomDatabaseConstructor

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

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

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

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

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

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

  • แก้ไขปัญหาที่ Room จะสร้างการเรียก recursiveFetchArrayMap ในเป้าหมายที่ไม่ใช่ Android อย่างไม่ถูกต้อง (710c36, b/352482325)
  • แก้ไขปัญหาที่บางครั้ง Room จะแสดงข้อยกเว้นเกี่ยวกับ "หมดเวลาขณะพยายามเชื่อมต่อ" ในโปรเจ็กต์ KMP (fa72d0, b/347737870)
  • แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติที่จะตรวจสอบคีย์นอกเร็วเกินไปก่อนที่ตารางอื่นๆ จะเปลี่ยนสคีมาให้สอดคล้องกับคีย์นอกใหม่ (7672c0, b/352085724)

เวอร์ชัน 2.7.0-alpha05

10 กรกฎาคม 2024

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

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

  • เปลี่ยนชื่อ SQLiteKt เป็น SQLite และ BundledSQLiteKt เป็น BundledSQLite (I8b501)

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

  • แก้ไขข้อบกพร่องที่ RoomDatabase จะหยุดทำงานชั่วคราวหรือแสดงข้อผิดพลาดเนื่องจากการเชื่อมต่อหมดเวลาเมื่อใช้ AndroidSQLiteDriver

เวอร์ชัน 2.7.0-alpha04

12 มิถุนายน 2024

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

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

  • แก้ไขปัญหาในโปรแกรมประมวลผลคำอธิบายประกอบของ Room ที่จะสร้างโค้ด KMP ที่เข้ากันไม่ได้เมื่อมีการกําหนดประเภทผลลัพธ์แบบหลายแผนที่ DAO (b/340983093)
  • แก้ไขปัญหาที่ Room ไม่พบการใช้งานฐานข้อมูลที่สร้างขึ้นหากคลาสที่มีคำอธิบายประกอบ @Database ไม่มีแพ็กเกจ (b/342097292)
  • แก้ไขปัญหาที่บางครั้งการเปิดใช้การปิดอัตโนมัติและการทำให้อินสแตนซ์หลายรายการใช้งานไม่ได้จะทำให้เกิด ConcurrentModificationException เมื่อฐานข้อมูลปิดโดยอัตโนมัติเนื่องจากไม่มีการใช้งาน

เวอร์ชัน 2.7.0-alpha03

29 พฤษภาคม 2024

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

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

  • แก้ไขปัญหาต่างๆ เกี่ยวกับ Kotlin 2.0 และ KSP 2.0 โปรดทราบว่า Kotlin 2.0 ที่รองรับ KSP 2 ยังไม่สมบูรณ์และทีมกําลังทํางานเกี่ยวกับ API และการเปลี่ยนแปลงลักษณะการทํางานต่างๆ ในคอมไพเลอร์ใหม่ (b/314151707)

เวอร์ชัน 2.7.0-alpha02

14 พฤษภาคม 2024

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

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

  • แก้ไขปัญหา KSP ต่างๆ

เวอร์ชัน 2.7.0-alpha01

1 พฤษภาคม 2024

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

ฟีเจอร์ใหม่

  • การรองรับ Kotlin Multiplatform (KMP): ในรุ่นนี้ Room ได้รับการรีแฟกทอริงให้กลายเป็นไลบรารี Kotlin Multiplatform (KMP) แม้ว่าจะยังต้องดำเนินการบางอย่าง แต่รุ่นนี้เป็นการเปิดตัว Room เวอร์ชันใหม่ที่ฟังก์ชันการทำงานส่วนใหญ่ได้รับการ "ทำให้เป็นเวอร์ชันทั่วไป" (ทำให้ใช้งานได้หลายแพลตฟอร์ม) แพลตฟอร์มที่รองรับในปัจจุบัน ได้แก่ Android, iOS, JVM (เดสก์ท็อป), Mac เวอร์ชันเดิม และ Linux เวอร์ชันเดิม ฟังก์ชันการทำงานที่ขาดหายไปในแพลตฟอร์มที่รองรับใหม่จะกลายเป็น "ฟีเจอร์ครบถ้วน" ในรุ่น Room ที่กำลังจะมาถึง

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งาน Room KMP ได้ที่เอกสารประกอบ Room KMP อย่างเป็นทางการ

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

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

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

เวอร์ชัน 2.6

เวอร์ชัน 2.6.1

29 พฤศจิกายน 2023

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

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

  • แก้ไขปัญหาในโค้ดที่สร้างขึ้นซึ่งระบบตั้งค่าเริ่มต้นของคอลัมน์ Double ใน EntityCursorConverter เป็น 0 แทน 0.0 นอกจากนี้ เรายังได้รวมการแก้ไขที่เป็นไปได้สำหรับกรณีขอบที่คล้ายกันสำหรับคอลัมน์ประเภท Float ไว้ด้วย (Id75f5, b/304584179)
  • ตอนนี้ข้อยกเว้นที่โยนออกมาจากการโหลด PagingSource จะนำไปเผยแพร่เป็น LoadStateUpdate ของ LoadResult.Error ที่มี Throwable สถานะข้อผิดพลาดนี้สามารถดูได้ผ่าน PagingDataAdapter.loadStateFlow(Views) หรือ LazyPagingItems.loadState(Compose) โปรดทราบว่าการดำเนินการนี้เป็นการทําการเปลี่ยนแปลงลักษณะการทํางาน ซึ่งที่ผ่านมาข้อผิดพลาดในการโหลดจะแสดงเป็นข้อยกเว้นที่เมธอด dao ที่ทริกเกอร์การโหลดแสดง (I93887, b/302708983)

เวอร์ชัน 2.6.0

18 ตุลาคม 2023

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

การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 2.5.0

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

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

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

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

เวอร์ชัน 2.6.0-rc01

20 กันยายน 2023

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

เวอร์ชัน 2.6.0-beta01

23 สิงหาคม 2023

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

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

  • การจัดการข้อยกเว้น SQLite กรณีพิเศษระหว่างการอัปเดต พบเมื่อมีการยกข้อยกเว้น 2067 SQLITE_CONSTRAINT_UNIQUE ระหว่างการอัปเดต การอัปเดตควรทำการอัปเดต (If2849, b/243039555)

เวอร์ชัน 2.6.0-alpha03

9 สิงหาคม 2023

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

ฟีเจอร์ใหม่

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

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

  • แก้ไขปัญหาช่องโหว่หน่วยความจํารั่วไหลที่อาจเกิดขึ้นใน QueryInterceptorStatement (I193d1)
  • แก้ไขลักษณะการทำงานที่ไม่ถูกต้องในฟังก์ชัน QueryInterceptorDatabase execSQL() (Iefdc8)

เวอร์ชัน 2.6.0-alpha02

21 มิถุนายน 2023

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

ปลั๊กอิน Gradle ของ Room

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

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

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

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

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

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

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

เวอร์ชัน 2.6.0-alpha01

22 มีนาคม 2023

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

ฟีเจอร์ใหม่

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

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

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

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

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

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

  • ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้นามธรรมเป็น DAO getter หรือ DAO query ใน Kotlin codegen แต่ควรเขียนใหม่เป็นฟังก์ชันเพื่อหลีกเลี่ยงความเข้าใจผิดว่าค่าพร็อพเพอร์ตี้เป็นแบบคงที่และมีผลลัพธ์ที่เก็บไว้แบบคงที่ (If6a13, b/127483380, b/257967987)

เวอร์ชัน 2.5.2

เวอร์ชัน 2.5.2

21 มิถุนายน 2023

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

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

  • แก้ไขปัญหาความเข้ากันไม่ได้กับ kotlinx-metadata-jvm (386d5c)
  • แก้ไขปัญหาที่ทำให้ Room แสดงข้อผิดพลาดเมื่อใช้ในการทดสอบ Robolectric (f79bea, b/274924903)

เวอร์ชัน 2.5.1

เวอร์ชัน 2.5.1

22 มีนาคม 2023

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

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

  • หลีกเลี่ยงการตรวจสอบไดเรกทอรีหลักของฐานข้อมูลใน FrameworkSQLiteHelper หากฐานข้อมูลเปิดอยู่ (5de86b8)
  • ใช้เครื่องหมายถูก isOpenInternal เมื่อตรวจสอบว่าฐานข้อมูลเปิดอยู่หรือไม่ (e91fb35)
  • การจัดการกรณีที่เข้ามาใหม่ใน acquireTransactionThread() ของ Room มีประสิทธิภาพมากขึ้นแล้ว (219f98b) ในระหว่างธุรกรรมที่หยุดชั่วคราว Room จะใช้เธรดจากโปรแกรมดำเนินการธุรกรรม เริ่มลูปเหตุการณ์ในเธรดนั้น และส่งการดำเนินการฐานข้อมูลที่หยุดชั่วคราวไปยังเธรดดังกล่าวเพื่อให้การดำเนินการทั้งหมดรวมอยู่ในโคโริวทีนของธุรกรรม โดยปกติแล้ว เทรดเธรดจะแตกต่างจากเทรดเธรดที่เริ่มธุรกรรม แต่บางกรณีก็อาจเหมือนกัน เพื่อจัดการกับกรณีที่มีการเรียกซ้ำดังกล่าว เราได้ปรับโครงสร้าง withTransaction() เพื่อไม่ให้ใช้งานควบคุมอีกต่อไป และจะเรียกใช้บล็อกธุรกรรมที่ระงับจากภายใน runBlocking ในชุดข้อความธุรกรรมแทน

เวอร์ชัน 2.5.0

เวอร์ชัน 2.5.0

22 กุมภาพันธ์ 2023

androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 และ androidx.room:room-paging-rxjava3:2.5.0 เผยแพร่แล้ว เวอร์ชัน 2.5.0 มีคอมมิตเหล่านี้

เวอร์ชัน 2.5.0

11 มกราคม 2023

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

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.4.0

  • แหล่งที่มา room-runtime ทั้งหมดได้รับการแปลงจาก Java เป็น Kotlin แล้ว โปรดทราบว่าคุณอาจพบปัญหาเกี่ยวกับแหล่งที่มาที่เข้ากันไม่ได้หากโค้ดเป็น Kotlin เนื่องจากการแปลงไลบรารีเป็น Kotlin ตัวอย่างเช่น การเปลี่ยนแปลงที่ทราบว่าเข้ากันไม่ได้ของแหล่งที่มาคือใน InvalidationTracker ตอนนี้คุณจะต้องประกาศ onInvalidate() ใน Observer เพื่อให้มีพารามิเตอร์ประเภท Set ไม่ใช่ MutableSet นอกจากนี้ ยังมีการเปลี่ยนเมธอด getter บางรายการเป็นพร็อพเพอร์ตี้ที่ต้องใช้ไวยากรณ์การเข้าถึงพร็อพเพอร์ตี้ในไฟล์ Kotlin โปรดรายงานข้อบกพร่องหากพบปัญหาการไม่เข้ากันได้ที่สำคัญ
  • เพิ่มคำอธิบายประกอบทางลัดใหม่ @Upsert ซึ่งจะพยายามแทรกเอนทิตีเมื่อไม่มีข้อขัดแย้งด้านความเป็นเอกลักษณ์ หรืออัปเดตเอนทิตีหากมีข้อขัดแย้ง (I7aaab, b/241964353)
  • เราได้เพิ่มรายการใหม่สำหรับการจัดเรียงห้อง room-paging-rxjava2, room-paging-rxjava3 และ room-paging-guava เพื่อรองรับการจัดเรียงห้อง
  • เพิ่ม API สำหรับระบุชื่อตารางคีย์และค่าเพื่อคลายความกำกวมใน @MapInfo (Icc4b5)

เวอร์ชัน 2.5.0-rc01

7 ธันวาคม 2022

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

  • รุ่นนี้เหมือนกับ 2.5.0-beta02

เวอร์ชัน 2.5.0-beta02

9 พฤศจิกายน 2022

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

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

  • แก้ไข API ต่างๆ ที่ใช้อาร์กิวเมนต์การค้นหาจากแบบคงที่ (Array<Any?>) เป็นแบบผันแปร (Array<out Any?>) เพื่อให้ตรงกับลักษณะการทำงานของอาร์เรย์ของ Java (b/253531073)

เวอร์ชัน 2.5.0-beta01

5 ตุลาคม 2022

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

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

  • จำกัดเวอร์ชันขั้นต่ำที่รองรับ @Upsert เป็น API 16 เนื่องจากไม่สามารถระบุข้อจำกัดของคีย์หลักที่ขัดแย้งกันใน API เวอร์ชันเก่า (I5f67f, b/243039555)

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

  • แก้ไขปัญหาที่ตารางเงาส่งออกไปยังไฟล์สคีมา .json อย่างไม่ถูกต้อง ทำให้ไฟล์เสียหาย (I4f83b, b/246751839)

เวอร์ชัน 2.5.0-alpha03

24 สิงหาคม 2022

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

ฟีเจอร์ใหม่

  • เพิ่มคำอธิบายประกอบทางลัดใหม่ @Upsert ซึ่งจะพยายามแทรกเอนทิตีเมื่อไม่มีข้อขัดแย้งด้านความเป็นเอกลักษณ์ หรืออัปเดตเอนทิตีหากมีข้อขัดแย้ง (I7aaab, b/241964353)

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

  • ตอนนี้ Room จะแสดง SQLiteConstraintException แทน IllegalStateException ในระหว่างการตรวจสอบข้อจำกัดของคีย์ต่างประเทศในการย้ายข้อมูลอัตโนมัติ (I328dd)
  • แก้ไขการเปลี่ยนแปลงที่ไม่เข้ากันได้ของแหล่งที่มา Kotlin สำหรับ getter / พร็อพเพอร์ตี้ของ getOpenHelper, getQueryExecutor และ getTransactionExecutor (Iad0ac)

เวอร์ชัน 2.5.0-alpha02

1 มิถุนายน 2022

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

ฟีเจอร์ใหม่

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

เวอร์ชัน 2.5.0-alpha01

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

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

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

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

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

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

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

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

เวอร์ชัน 2.4.3

เวอร์ชัน 2.4.3

27 กรกฎาคม 2022

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

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

  • แก้ไขปัญหาที่ทำให้ Room ไม่รู้จักฟังก์ชันที่ระงับการทำงานใน Kotlin 1.7 (b/236612358)

เวอร์ชัน 2.4.2

เวอร์ชัน 2.4.2

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

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

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

  • แก้ไขปัญหาการสร้างโค้ดสำหรับฟังก์ชัน @Transaction 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 ซึ่งจะใช้ชื่อฟังก์ชันต้นทางขณะจับคู่กับพร็อพเพอร์ตี้เป็น getter/setter (ก่อนหน้านี้ใช้ชื่อ JVM ของฟังก์ชันซึ่งแตกต่างจากฟังก์ชัน/พร็อพเพอร์ตี้ภายใน) หากคุณใช้แอตทริบิวต์ @JvmName ที่กำหนดเองเพื่อจับคู่ตัวรับ/ตัวตั้งค่ากับพร็อพเพอร์ตี้ส่วนตัว โปรดตรวจสอบโค้ดที่สร้างขึ้นอีกครั้งหลังจากการอัปเดต (If6531, b/205289020)

เวอร์ชัน 2.4.0

เวอร์ชัน 2.4.0

15 ธันวาคม 2021

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

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

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

เวอร์ชัน 2.4.0-rc01

1 ธันวาคม 2021

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

ฟีเจอร์ใหม่

  • อัปเดต Dependency ของ Room ใน KSP เป็น 1.6.0-1.0.1 เพื่อรองรับ Kotlin 1.6

เวอร์ชัน 2.4.0-beta02

17 พฤศจิกายน 2021

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

ฟีเจอร์ใหม่

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

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

  • เราได้เพิ่มเครื่องมือวิเคราะห์ TypeConverter ใหม่ที่พิจารณาข้อมูลเกี่ยวกับความสามารถในการเป็น Null ในประเภท เนื่องจากข้อมูลนี้พร้อมใช้งานใน KSP เท่านั้น ระบบจึงจะเปิดใช้โดยค่าเริ่มต้นใน KSP เท่านั้น หากการวิเคราะห์นี้ทำให้เกิดปัญหา คุณสามารถปิดได้โดยส่งค่า annotate.useNullAwareTypeAnalysis=false ไปยังโปรแกรมประมวลผลคำอธิบายประกอบ หากเป็นเช่นนั้น โปรดรายงานข้อบกพร่องเนื่องจากเราจะนำการแจ้งว่าไม่เหมาะสมนี้ออกในอนาคต เมื่อใช้เครื่องมือวิเคราะห์ TypeConverter ใหม่นี้ เราขอแนะนำให้ระบุเฉพาะ TypeConverter ฝั่งที่รับซึ่งไม่ใช่ค่า Null เนื่องจากเครื่องมือวิเคราะห์ใหม่สามารถรวม TypeConverter เหล่านี้เข้าด้วยกันด้วยการตรวจสอบค่า Null โปรดทราบว่าการดำเนินการนี้จะไม่ส่งผลต่อผู้ใช้ที่ใช้ KAPT หรือ Java เป็นโปรแกรมประมวลผลคำอธิบายประกอบ (ต่างจาก KSP) ซึ่งไม่มีข้อมูลเกี่ยวกับความสามารถในการเป็น Null ของประเภท (Ia88f9, b/193437407)
  • แก้ไขข้อบกพร่องที่ทำให้ Room คอมไพล์ไม่สำเร็จพร้อมข้อผิดพลาด SQL เมื่อเอนทิตี FTS ประกาศให้ใช้ตัวแยกวิเคราะห์ ICU (I00db9, b/201753224)
  • แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติเกี่ยวกับคอลัมน์ใหม่ที่เพิ่มลงในเอนทิตีที่ฝังระหว่างเวอร์ชัน (I5fcb1b/193798291)
  • เราได้แก้ไขปัญหาเกี่ยวกับประเภทผลลัพธ์ของเมธอดการค้นหาเชิงสัมพันธ์ในการค้นหา LEFT JOIN แล้ว การเปลี่ยนแปลงเหล่านี้จะทำให้ในกรณีที่มีการแมปแบบ 1:หลายรายการ คอลเล็กชันที่แสดงผลสำหรับคีย์จะไม่รวมออบเจ็กต์ค่าที่ไม่ถูกต้องหากไม่พบในเคอร์เซอร์ หากไม่พบค่าที่ถูกต้อง ระบบจะแมปคีย์กับคอลเล็กชันว่าง (Id5552b/201946438)
  • แก้ปัญหาการย้ายข้อมูลอัตโนมัติที่ไม่สามารถหลีกคีย์เวิร์ด SQLite ในชื่อคอลัมน์ (Idbed4b/197133152)

เวอร์ชัน 2.4.0-beta01

13 ตุลาคม 2021

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

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

  • แก้ไขปัญหาการย้ายข้อมูลอัตโนมัติที่ไม่เพิ่มคอลัมน์ใหม่เมื่อตารางอื่นในการย้ายข้อมูลอัตโนมัติเดียวกันมีคอลัมน์ใหม่ที่มีชื่อเดียวกันด้วย (Ia5db5, b/200818663)
  • การใช้งาน PagingSource ที่สร้างขึ้นโดย room-paging ตอนนี้ใช้ queryExecutor ที่ส่งผ่าน RoomDatabase.Builder เพื่อให้สามารถลบล้างได้แทน Dispatchers.IO ก่อนหน้านี้ (Iae259)

เวอร์ชัน 2.4.0-alpha05

29 กันยายน 2021

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

ฟีเจอร์ใหม่

  • เพิ่มเครื่องมือแปลงประเภทในตัวสําหรับ UUID (I671e8, b/73132006)

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

  • เพิ่มพร็อพเพอร์ตี้ใหม่ลงในคําอธิบายประกอบ TypeConverters เพื่อให้นักพัฒนาซอฟต์แวร์ปิดใช้เครื่องมือแปลง Enum และ UUID ในตัวได้ โดยค่าเริ่มต้น ตัวแปลงเหล่านี้จะเปิดอยู่ แต่คุณสามารถปิดใช้ตัวแปลงสำหรับขอบเขตหนึ่งๆ หรือทั้งฐานข้อมูลได้ ดูรายละเอียดได้ในเอกสารประกอบของ TypeConverter (36ae9e, b/195413406)

  • การรองรับคีย์/ค่าที่ไม่ใช่ POJO สำหรับประเภทผลลัพธ์ Multimap ใน DAO ผ่านแอตทริบิวต์ @MapInfo (I4d704)

@MapInfo จะจําเป็นเมื่อคอลัมน์คีย์หรือค่าของแผนที่มาจากคอลัมน์เดียว ดูตัวอย่างดังนี้

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • กำหนดให้ room-paging เป็นอาร์ติแฟกต์ที่จำเป็นเมื่อใช้ Paging3 กับ Room (Ieaffe)

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

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

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

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

เวอร์ชัน 2.4.0-alpha04

21 กรกฎาคม 2021

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

ฟีเจอร์ใหม่

  • ตอนนี้ Room รองรับวิธีการ @Dao ประเภทผลลัพธ์แบบ Multimap ซึ่งมีประโยชน์สำหรับคำสั่ง JOIN ประเภทของมัลติแมปที่รองรับคือ Map พร้อมด้วย ImmutableMap, ImmutableSetMultimap และ ImmutableListMultimap ของ Guava

    ตัวอย่างการค้นหา Multimap มีดังนี้

    แผนที่ความสัมพันธ์แบบ 1:1

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

    แผนที่ความสัมพันธ์แบบ 1: หลายรายการ (มัลติแมปมาตรฐาน)

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

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

การเรียกบุคคลในห้องพัก

  • androidx.room:room-paging เปิดตัวแล้ว โดยรองรับการแบ่งหน้า 3.0 ในตัวสําหรับการค้นหา Room ที่แสดงผล androidx.paging.PagingSource

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • อาร์ติแฟกต์นี้จะแทนที่การใช้งาน androidx.paging.PagingSource ที่ Room สร้างขึ้นด้วยการใช้งานที่สร้างขึ้นบน Paging 3.0 API การใช้งาน PagingSource ใหม่จะแยกวิเคราะห์คีย์ต่างออกไป ดังนั้นคีย์ใดก็ตามที่ระบุให้กับ PagingSource ของ Room ด้วยตนเองจะต้องคำนึงถึงการเปลี่ยนแปลงลักษณะการทำงานนี้ด้วย ซึ่งรวมถึง initialKey ที่ส่งผ่านตัวสร้างของ Pager หน้าเว็บจะเริ่มโหลดจาก Key โดยที่ Key เป็นรายการแรกที่โหลด ซึ่งแตกต่างจากลักษณะการทำงานที่มีอยู่ซึ่งถือว่า LoadParams.Refresh.Key เป็นตําแหน่งการเลื่อนของผู้ใช้ และโหลดรายการทั้งก่อนและหลังคีย์

  • คุณเลือกใช้รายการนี้หรือไม่ก็ได้ และการเลือกไม่ใช้จะกลับไปใช้การรองรับการเรียกเลขหมาย 3.0 ที่มีอยู่ซึ่งเปิดตัวใน Room 2.3 อย่างไรก็ตาม รายการนี้จะเป็นรายการที่ต้องระบุในรุ่นต่อๆ ไปสำหรับผู้ที่ใช้ Room ที่มีการแบ่งหน้า 3.0 หากต้องการเลือกใช้ ให้เพิ่มอาร์ติแฟกต์การแบ่งหน้าห้องใหม่ลงในคลาสพาธ หากใช้ Gradle ให้เพิ่มข้อมูลโค้ดต่อไปนี้ลงใน build.gradle

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

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

  • แก้ไขปัญหาในการย้ายข้อมูลอัตโนมัติเกี่ยวกับการละเมิดคีย์ต่างประเทศ (b/190113935)

เวอร์ชัน 2.4.0-alpha03

16 มิถุนายน 2021

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

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

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

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

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

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

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

การอัปเดตทรัพยากร Dependency

  • ตอนนี้การรองรับ KSP ของ Room จะขึ้นอยู่กับ KSP 1.5.10-1.0.0-beta01 (1ecb11, b/160322705)

เวอร์ชัน 2.4.0-alpha02

5 พฤษภาคม 2021

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

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

  • @ProvidedAutoMigrationSpec เป็น API ใหม่ที่ประกาศว่าจะมี AutoMigrationSpec ให้บริการขณะรันไทม์ผ่าน RoomDatabase.Builder#addAutoMigrationSpec() ซึ่งช่วยให้เฟรมเวิร์กการฉีดข้อมูล Dependency ระบุข้อกำหนดดังกล่าวได้เมื่อต้องการ Dependency ที่ซับซ้อน

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

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

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

  • แก้ไขปัญหาใน JournalMode.TRUNCATE ของ Room ที่บางครั้งมีการเรียกใช้ InvalidationTracker Callback อย่างไม่ถูกต้อง สายเรียกเข้าล่าช้า หรือไม่เรียกให้แสดงเลย ขอขอบคุณ Uli Bubenheimer | bubenheimer@users.noreply.github.com (b/154040286)

เวอร์ชัน 2.4.0-alpha01

21 เมษายน 2021

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

ฟีเจอร์ใหม่

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

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

  • แก้ไขปัญหาที่ defaultValue ที่มีวงเล็บปีกกาเกินได้รับการตรวจสอบอย่างไม่ถูกต้องโดยการตรวจสอบสคีมาของ Room b/182284899

เวอร์ชัน 2.3.0

เวอร์ชัน 2.3.0

21 เมษายน 2021

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

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.2.0

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

เวอร์ชัน 2.3.0-rc01

24 มีนาคม 2021

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

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

  • แก้ไขปัญหาที่ทำให้ใช้การค้นหา Coroutine Flow ที่ Room สร้างขึ้นในบล็อก withTransaction ที่ระงับไม่ได้ (I797bf)

เวอร์ชัน 2.3.0-beta03

10 มีนาคม 2021

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

ฟีเจอร์ใหม่

  • เพิ่มการรองรับการคอมไพล์แบบเพิ่มทีละน้อยสำหรับ KSP (I031c1, b/176453350)

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

  • แก้ไขข้อบกพร่องที่การสร้าง PagingSource ในเทรดหลักอาจทริกเกอร์ ANR (I42b74, b/181221318)
  • แก้ไขระดับการแชร์ของ @ExperimentalRoomApi เป็นสาธารณะแทนที่จะเป็นแพ็กเกจส่วนตัว (b/181356119)

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

  • อนุญาตให้ Room ยอมรับประเภทผลลัพธ์ POJO ในเมธอด DAO ที่มีการกำกับหมายด้วย @Query เมื่อมีการกำกับหมายด้วย @SkipQueryVerification ด้วย Room จะพยายามอย่างเต็มที่เพื่อแปลงผลลัพธ์ของการค้นหาเป็นประเภทผลลัพธ์ POJO ในลักษณะเดียวกับที่ดำเนินการกับ@RawQueryเมธอด DAO ที่มีคำอธิบายประกอบ ขอขอบคุณ "Markus Riegel | hey@marcorei.com" (I45acb)

เวอร์ชัน 2.3.0-beta02

18 กุมภาพันธ์ 2021

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

ฟีเจอร์ใหม่

  • ตอนนี้ Room รองรับการประมวลผลสัญลักษณ์ Kotlin KSP แบบทดลองแล้ว

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

    หากต้องการใช้ Room กับ KSP คุณสามารถใช้ปลั๊กอิน KSP Gradle และแทนที่การกําหนดค่า kapt ในไฟล์บิลด์ด้วย ksp เช่น ใช้ ksp 'androidx.room:room-compiler:2.3.0-beta02' แทน kapt 'androidx.room:room-compiler:2.3.0-beta02' ดูรายละเอียดเพิ่มเติมในเอกสารประกอบ KSP

    โปรดทราบว่า KSP ยังอยู่ระหว่างการทดสอบ เราจึงขอแนะนำให้ใช้ KAPT สำหรับโค้ดเวอร์ชันที่ใช้งานจริง การลดเวลาสร้างจะมีผลเฉพาะในกรณีที่ไม่มีเครื่องประมวลผลอื่นๆ ที่ใช้ KAPT ดูปัญหาที่ทราบได้ที่ b/160322705

เวอร์ชัน 2.3.0-beta01

27 มกราคม 2021

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

ฟีเจอร์ใหม่

  • ฐานข้อมูลที่ปิดอัตโนมัติ: ตอนนี้ Room สามารถปิดฐานข้อมูลที่ไม่มีการเข้าถึงหลังจากผ่านไปตามระยะเวลาที่กำหนด นี่เป็นฟีเจอร์ทดลองและสามารถเปิดใช้ได้โดยการเรียกใช้ RoomDatabase.Builder#setAutoCloseTimeout() ฟีเจอร์นี้มีประโยชน์สําหรับแอปพลิเคชันที่มีฐานข้อมูลหลายแห่ง

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

  • แก้ไขข้อบกพร่องที่เมธอด Dao ที่มีเมธอด @Update หรือ @Delete หลายรายการที่มีกลยุทธ์การขัดแย้งกันจะสร้างโค้ดที่มีกลยุทธ์เพียงกลยุทธ์เดียว ซึ่งจะละเว้นกลยุทธ์ที่กําหนดไว้ (/I0b90d, b/176138543)

เวอร์ชัน 2.3.0-alpha04

16 ธันวาคม 2020

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

ฟีเจอร์ใหม่

  • ตอนนี้ Room มี API เรียกกลับทั่วไป RoomDatabase.QueryCallback สำหรับเวลาที่ระบบกำลังจะดำเนินการค้นหา ซึ่งอาจมีประโยชน์สำหรับการบันทึกในบิลด์แก้ไขข้อบกพร่อง คุณสามารถตั้งค่าการโทรกลับผ่าน RoomDatabase.Builder#setQueryCallback() (Iaa513, b/174478034, b/74877608)
  • ตอนนี้ Room จะใช้ตัวแปลงประเภท Enum เป็นสตริงและในทางกลับกันโดยค่าเริ่มต้นหากไม่ได้ระบุไว้ หากตัวแปลงประเภทสำหรับ Enum มีอยู่แล้ว Room จะให้ความสำคัญกับการใช้ตัวแปลงประเภทนั้นมากกว่าตัวแปลงประเภทเริ่มต้น (b/73132006)

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

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

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

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

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

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

เวอร์ชัน 2.3.0-alpha03

14 ตุลาคม 2020

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

ฟีเจอร์ใหม่

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

  • ตอนนี้ Room มี API สำหรับการสร้างฐานข้อมูลโดยใช้ฐานข้อมูลที่แพ็กเกจไว้ล่วงหน้าซึ่งอ่านจากสตรีมอินพุต ซึ่งจะรองรับกรณีที่ฐานข้อมูลของแพ็กเกจล่วงหน้าเป็นไฟล์ GZIP ขอขอบคุณ ‘Ahmed El-Helw ahmedre@gmail.com’ (3e6792, b/146911060)

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

  • เพิ่มเป้าหมายที่ขาดหายไปลงในคําอธิบายประกอบ @ForeignKey ซึ่งป้องกันไม่ให้มีการใช้เป้าหมายนั้นนอกคําอธิบายประกอบ @Entity (Iced1e)

  • ฟิลด์ mCallbacks ใน RoomDatabase.java ซ่อนอยู่ (d576cb, b/76109329)

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

  • อัปเดตเอกสารประกอบ TypeConverters เพื่อชี้แจงว่า TypeConverters ใช้เพื่อแปลงคอลัมน์ / ฟิลด์เท่านั้น ไม่สามารถแปลงแถวได้ (I07c56, b/77307836)

  • อัปเดต DaoProcessor เพื่อแก้ไขข้อผิดพลาดเกี่ยวกับคอมไพเลอร์ใน Dao ที่มีซุปเปอร์ไทป์ทั่วไปที่มี "พรอมิเตอ" ของ Kotlin (Ice6bb, b/160258066)

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

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

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

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

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

  • เพิ่มการเรียกกลับ onOpenPrepackagedDatabase เมื่อคัดลอก DB ที่บรรจุไว้ล่วงหน้า (I1ba74, b/148934423)

เวอร์ชัน 2.3.0-alpha02

22 กรกฎาคม 2020

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

ฟีเจอร์ใหม่

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

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

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

เวอร์ชัน 2.3.0-alpha01

10 มิถุนายน 2020

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

ฟีเจอร์ใหม่

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

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

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

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

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

  • แก้ไขข้อบกพร่องที่ Room ตรวจหาเวอร์ชัน JDK ที่ใช้เพื่อเปิดใช้โปรแกรมประมวลผลคำอธิบายประกอบแบบเพิ่มทีละรายการไม่ถูกต้อง ขอขอบคุณ Blaz Solar (me@blaz.solar) (b/155215201)
  • ตอนนี้ Room จะฝัง ANTLR ที่ต้องการใช้กับโปรแกรมประมวลผลคำอธิบายประกอบเพื่อหลีกเลี่ยงข้อขัดแย้งของเวอร์ชันกับโปรแกรมประมวลผลอื่นๆ ที่ใช้ ANTLR ด้วย (b/150106190)

เวอร์ชัน 2.2.6

เวอร์ชัน 2.2.6

16 ธันวาคม 2020

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

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

  • แก้ไขปัญหาที่ Room จะปิดใช้การประมวลผลคำอธิบายประกอบแบบเพิ่มใน JDK เวอร์ชันใหม่อย่างไม่ถูกต้อง (b/171387388)

เวอร์ชัน 2.2.5

เวอร์ชัน 2.2.5

18 มีนาคม 2020

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

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

  • กำหนดให้ MultiInstanceInvalidationService เป็น directBootAware ขอขอบคุณ "Mygod contact-git@mygod.be" (b/148240967)
  • แก้ไขข้อบกพร่องที่ทําให้ระบบขัดข้องเมื่อเปิดใช้การลบล้างอินสแตนซ์หลายรายการและฐานข้อมูลมีเอนทิตี FTS (b/148969394)
  • แก้ไขปัญหาเมื่อโหลดไลบรารีแบบเนทีฟของ SQLite ในโปรแกรมประมวลผลคำอธิบายประกอบของ Room ซึ่งจะทำให้คอมไพเลอร์ขัดข้องเนื่องจากการคอมไพล์แบบขนาน (b/146217083)

เวอร์ชัน 2.2.4

เวอร์ชัน 2.2.4

19 กุมภาพันธ์ 2020

ปล่อย androidx.room:room-common:2.2.4, androidx.room:room-compiler:2.2.4, androidx.room:room-guava:2.2.4, androidx.room:room-ktx:2.2.4, androidx.room:room-migration:2.2.4, androidx.room:room-runtime:2.2.4, androidx.room:room-rxjava2:2.2.4 และ androidx.room:room-testing:2.2.4 เวอร์ชัน 2.2.4 มีคอมมิตเหล่านี้

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

  • แก้ไขปัญหาเกี่ยวกับการระงับธุรกรรมที่อาจเกิดข้อขัดข้องหากมีการยกเลิก coroutine อย่างรวดเร็วก่อนที่ธุรกรรมจะเริ่มขึ้นจริง (b/148181325)
  • แก้ปัญหาการใช้ @Generated อย่างไม่ถูกต้องเมื่อสร้างด้วย JDK 9 (b/146538330)
  • แก้ไขปัญหาที่ Room จะสร้างโค้ดที่ไม่ถูกต้องเมื่ออินเทอร์เฟซ DAO ใน Kotlin มีฟังก์ชันที่เฉพาะเจาะจง (b/146825845)

เวอร์ชัน 2.2.3

เวอร์ชัน 2.2.3

18 ธันวาคม 2019

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

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

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

เวอร์ชัน 2.2.2

เวอร์ชัน 2.2.2

20 พฤศจิกายน 2019

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

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

  • แก้ไขข้อบกพร่องที่การเก็บรวบรวมความสัมพันธ์แบบ 1:1 ที่มีแถวมากกว่า 999 แถวจะทำให้ Room แสดงผลรายการที่เกี่ยวข้องเป็น Null (b/143105450)

เวอร์ชัน 2.2.1

เวอร์ชัน 2.2.1

23 ตุลาคม 2019

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

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

  • แก้ไขข้อบกพร่องที่ Room จะเตือนอย่างไม่ถูกต้องเกี่ยวกับ CURSOR_MISMATCH เมื่อเปิดตัวเลือกคอมไพเลอร์expandProjection (b/140759491)
  • เพิ่มกลไกการลองอีกครั้งเพื่อจัดการกับไลบรารีเนทีฟที่ขาดหายไปซึ่งใช้เพื่อยืนยันการค้นหาระหว่างเวลาคอมไพล์

เวอร์ชัน 2.2.0

เวอร์ชัน 2.2.0

9 ตุลาคม 2019

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

การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 2.1.0

  • ฐานข้อมูลที่บรรจุไว้ล่วงหน้า: ตอนนี้ API 2 รายการใหม่ใน RoomDatabase.Builder พร้อมใช้งานในการสร้าง RoomDatabase จากไฟล์ฐานข้อมูลที่ป้อนข้อมูลไว้แล้ว createFromAsset() สำหรับกรณีที่ไฟล์ฐานข้อมูลที่ป้อนข้อมูลล่วงหน้าอยู่ในโฟลเดอร์ assets ของ APK ส่วน createFromFile() สำหรับกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้ API เหล่านี้จะเปลี่ยนลักษณะการทํางานของการย้ายข้อมูลที่ลบข้อมูลออก เช่น ในระหว่างการย้ายข้อมูลสำรอง Room จะพยายามคัดลอกฐานข้อมูลที่สร้างขึ้นล่วงหน้าอีกครั้ง (หากมี) ไม่เช่นนั้นระบบจะเปลี่ยนไปใช้การลบและสร้างตารางทั้งหมดอีกครั้ง b/62185732
  • ค่าเริ่มต้นของสคีมา: ตอนนี้ @ColumnInfo มีพร็อพเพอร์ตี้ใหม่ defaultValue ที่สามารถใช้เพื่อระบุค่าเริ่มต้นของคอลัมน์ ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูลและจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากระบุไว้ b/64088772
  • ความสัมพันธ์แบบหลายต่อหลาย: ตอนนี้ @Relation มีพร็อพเพอร์ตี้ใหม่ associateBy ซึ่งรับคําอธิบายประกอบใหม่ @Junction ที่ใช้เพื่อประกาศความสัมพันธ์ที่จําเป็นต้องได้รับการตอบสนองผ่านตารางเชื่อมต่อ (หรือที่เรียกว่าตารางการเข้าร่วม) b/69201917
  • ความสัมพันธ์แบบ 1:1: ยกเลิกข้อจำกัดในช่อง POJO ที่มีคำอธิบายประกอบด้วย @Relation ต้องเป็นประเภท List หรือ Set ซึ่งทำให้แสดงความสัมพันธ์แบบค่าเดี่ยวได้b/62905145
  • เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO @Insert, @Update และ @Delete มีพร็อพเพอร์ตี้ใหม่ targetEntity ซึ่งช่วยให้ระบุตารางเป้าหมายที่เมธอด DAO ควรจะดำเนินการได้ ซึ่งช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งระบบจะตีความว่าเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตการแทรก ลบ และอัปเดตบางส่วน b/127549506
  • Coroutines Flow: ตอนนี้เมธอด @Query DAO จะเป็นประเภทผลลัพธ์ Flow<T> ได้แล้ว ฟีดข้อมูลที่แสดงผลจะส่งชุดค่าใหม่อีกครั้งหากตารางที่สังเกตในคําค้นหาเป็นโมฆะ การประกาศฟังก์ชัน DAO ที่มีประเภทผลลัพธ์เป็น Channel<T> เป็นข้อผิดพลาด Room แนะนำให้คุณใช้ Flow แล้วใช้ฟังก์ชันใกล้เคียงเพื่อแปลง Flow เป็น Channel แทน b/130428884
  • ตัวประมวลผลคําอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นตัวประมวลผลคําอธิบายประกอบแบบแยกของ Gradle และสามารถเปิดใช้การเพิ่มได้ผ่านตัวเลือกตัวประมวลผล room.incremental ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือกเครื่องมือคอมไพล์ห้อง หากพบปัญหาใดๆ โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การเพิ่มจำนวนโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต b/112110217
  • การขยายการฉายภาพ: เพิ่มตัวเลือกคอมไพเลอร์ใหม่สำหรับทดลองใช้room.expandProjection ซึ่งทําให้ Room เขียนคําค้นหาใหม่ด้วยการฉายภาพสตาร์เพื่อให้มีเฉพาะคอลัมน์ใน POJO ประเภทที่แสดงผล เช่น สําหรับเมธอด DAO ที่มี @Query("SELECT * FROM Song") ซึ่งแสดงผลลัพธ์ POJO ชื่อ SongIdAndTitle ที่มีเพียง 2 ช่อง จากนั้น Room จะเขียนการค้นหาใหม่เป็น SELECT id, title FROM Song เพื่อให้ดึงชุดคอลัมน์ขั้นต่ำที่ตรงกับประเภทผลลัพธ์ ซึ่งจะช่วยลดCURSOR_MISMATCHคำเตือนที่แสดงเมื่อการค้นหาแสดงคอลัมน์เพิ่มเติมที่ไม่ตรงกับช่องใดๆ ในประเภท POJO ที่แสดง

เวอร์ชัน 2.2.0-rc01

5 กันยายน 2019

androidx.room:room:2.2.0-rc01 ได้รับการปล่อยแล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

ไม่มีการเปลี่ยนแปลงที่เผยแพร่ต่อสาธารณะนับตั้งแต่ห้อง 2.2.0-beta01

เวอร์ชัน 2.2.0-beta01

22 สิงหาคม 2019

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

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

  • แก้ไขข้อบกพร่องที่การค้นหา Coroutine Flow จะหยุดส่งค่าใหม่อีกครั้งหลังจากผ่านไประยะหนึ่ง (b/139175786)
  • แก้ไขข้อบกพร่องที่ Room ไม่ยอมรับรหัสแฮชสคีมาเดิมขณะเปิดฐานข้อมูลที่ไม่มีการย้ายข้อมูลตั้งแต่ Room 1.0 ซึ่งทําให้รันไทม์ขัดข้องเนื่องจากสคีมาไม่ถูกต้อง (b/139306173)

เวอร์ชัน 2.2.0-alpha02

7 สิงหาคม 2019

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

ฟีเจอร์ใหม่

  • Coroutines Flow: ตอนนี้เมธอด @Query DAO จะเป็นประเภทผลลัพธ์ Flow<T> ได้แล้ว ฟีดข้อมูลที่แสดงผลจะส่งชุดค่าใหม่อีกครั้งหากตารางที่สังเกตในคําค้นหาเป็นโมฆะ การประกาศฟังก์ชัน DAO ที่มีประเภทผลลัพธ์เป็น Channel<T> เป็นข้อผิดพลาด Room แนะนำให้คุณใช้ Flow แล้วใช้ฟังก์ชันใกล้เคียงเพื่อแปลง Flow เป็น Channel แทน b/130428884
  • การขยายการฉายภาพ: เพิ่มตัวเลือกคอมไพเลอร์ใหม่สำหรับทดลองใช้room.expandProjection ซึ่งทําให้ Room เขียนคําค้นหาใหม่ด้วยการฉายภาพสตาร์เพื่อให้มีเฉพาะคอลัมน์ใน POJO ประเภทที่แสดงผล เช่น สําหรับเมธอด DAO ที่มี @Query("SELECT * FROM Song") ซึ่งแสดงผลลัพธ์ POJO ชื่อ SongIdAndTitle ที่มีเพียง 2 ช่อง จากนั้น Room จะเขียนการค้นหาใหม่เป็น SELECT id, title FROM Song เพื่อให้ดึงชุดคอลัมน์ขั้นต่ำที่ตรงกับประเภทผลลัพธ์ ซึ่งจะช่วยลดCURSOR_MISMATCHคำเตือนที่แสดงเมื่อการค้นหาแสดงคอลัมน์เพิ่มเติมที่ไม่ตรงกับช่องใดๆ ในประเภท POJO ที่แสดง
  • onDestructiveMigrate เป็น API การเรียกกลับใหม่ที่เพิ่มลงใน RoomDatabase.Callback สำหรับกรณีที่ Room ย้ายข้อมูลฐานข้อมูลอย่างทำลายล้าง b/79962330

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

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

เวอร์ชัน 2.2.0-alpha01

10 กรกฎาคม 2019

ฟีเจอร์ใหม่

  • ฐานข้อมูลที่บรรจุไว้ล่วงหน้า: ตอนนี้ API 2 รายการใหม่ใน RoomDatabase.Builder พร้อมใช้งานในการสร้าง RoomDatabase จากไฟล์ฐานข้อมูลที่ป้อนข้อมูลไว้แล้ว createFromAsset() สำหรับกรณีที่ไฟล์ฐานข้อมูลที่ป้อนข้อมูลล่วงหน้าอยู่ในโฟลเดอร์ assets ของ APK ส่วน createFromFile() สำหรับกรณีที่ไฟล์อยู่ในตำแหน่งใดก็ได้ การใช้ API เหล่านี้จะเปลี่ยนลักษณะการทํางานของการย้ายข้อมูลที่ลบข้อมูลออก เช่น ในระหว่างการย้ายข้อมูลสำรอง Room จะพยายามคัดลอกฐานข้อมูลที่สร้างขึ้นล่วงหน้าอีกครั้ง (หากมี) ไม่เช่นนั้นระบบจะเปลี่ยนไปใช้การลบและสร้างตารางทั้งหมดอีกครั้ง b/62185732
  • ค่าเริ่มต้นของสคีมา: ตอนนี้ @ColumnInfo มีพร็อพเพอร์ตี้ใหม่ defaultValue ที่สามารถใช้เพื่อระบุค่าเริ่มต้นของคอลัมน์ ค่าเริ่มต้นเป็นส่วนหนึ่งของสคีมาฐานข้อมูลและจะได้รับการตรวจสอบระหว่างการย้ายข้อมูลหากระบุไว้ b/64088772

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

  • ความสัมพันธ์แบบหลายต่อหลาย: ตอนนี้ @Relation มีพร็อพเพอร์ตี้ใหม่ associateBy ซึ่งรับคําอธิบายประกอบใหม่ @Junction ที่ใช้เพื่อประกาศความสัมพันธ์ที่จําเป็นต้องได้รับการตอบสนองผ่านตารางเชื่อมต่อ (หรือที่เรียกว่าตารางการเข้าร่วม) b/69201917
  • ความสัมพันธ์แบบ 1:1: ยกเลิกข้อจำกัดในช่อง POJO ที่มีคำอธิบายประกอบด้วย @Relation ต้องเป็นประเภท List หรือ Set ซึ่งทำให้แสดงความสัมพันธ์แบบค่าเดี่ยวได้b/62905145
  • เอนทิตีเป้าหมาย: ตอนนี้คำอธิบายประกอบ DAO @Insert, @Update และ @Delete มีพร็อพเพอร์ตี้ใหม่ targetEntity ซึ่งช่วยให้ระบุตารางเป้าหมายที่เมธอด DAO ควรจะดำเนินการได้ ซึ่งช่วยให้พารามิเตอร์ของเมธอด DAO เหล่านั้นเป็น POJO ที่กำหนดเองได้ ซึ่งระบบจะตีความว่าเป็นเอนทิตีบางส่วน ในทางปฏิบัติ การดำเนินการนี้จะอนุญาตการแทรก ลบ และอัปเดตบางส่วน b/127549506
  • ตัวประมวลผลคําอธิบายประกอบแบบเพิ่มของ Gradle: ตอนนี้ Room เป็นตัวประมวลผลคําอธิบายประกอบแบบแยกของ Gradle และสามารถเปิดใช้การเพิ่มได้ผ่านตัวเลือกตัวประมวลผล room.incremental ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือกเครื่องมือคอมไพล์ห้อง หากพบปัญหาใดๆ โปรดรายงานข้อบกพร่องที่นี่ เราวางแผนที่จะเปิดใช้การเพิ่มจำนวนโดยค่าเริ่มต้นในเวอร์ชันเสถียรในอนาคต b/112110217

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

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

เวอร์ชัน 2.1.0

เวอร์ชัน 2.1.0

13 มิถุนายน 2019

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

การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 2.0.0

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

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

  • แก้ไขข้อผิดพลาดในการเริ่มต้น Room ที่อาจเกิดขึ้นเนื่องจากการกำหนดค่า temp_store ที่ตั้งค่าไว้แล้ว b/132602198
  • แก้ไขคำเตือนเกี่ยวกับการใช้เครื่องหมายคำพูดคู่สำหรับผู้ใช้ที่มี SQLite 3.27.0 ขึ้นไป b/131712640
  • แก้ไขข้อบกพร่องที่ทำให้ InvalidationTracker ขัดข้องเมื่อการตรวจสอบการลบล้างหลายรายการเกิดขึ้นพร้อมกัน b/133457594

เวอร์ชัน 2.1.0-beta01

7 พฤษภาคม 2019

androidx.room 2.1.0-beta01 เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก 2.1.0-alpha07 ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่

เวอร์ชัน 2.1.0-alpha07

25 เมษายน 2019

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

  • ฟังก์ชันส่วนขยาย RoomDatabase.withTransaction มีการเปลี่ยนแปลงเพื่อไม่ให้รับบล็อกฟังก์ชันที่มี CoroutineScope เป็นผู้รับอีกต่อไป ซึ่งจะช่วยป้องกันไม่ให้ข้าม coroutineScope { } wrapper เพิ่มเติมที่จําเป็นต่อการดําเนินการในบล็อกธุรกรรมพร้อมกัน

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

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

เวอร์ชัน 2.1.0-alpha06

22 มีนาคม 2019

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

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

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

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

เวอร์ชัน 2.1.0-alpha05

13 มีนาคม 2019

ฟีเจอร์ใหม่

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

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

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

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

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

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

  • Room 2.1.0-alpha05 ขึ้นอยู่กับอาร์ติแฟกต์ kotlinx-metadata-jvm ซึ่งขณะนี้ไม่พร้อมใช้งานใน Maven Central (KT-27991) Dependency นี้แก้ไขได้โดยการเพิ่ม maven { url "https://kotlin.bintray.com/kotlinx/" } ไปยังที่เก็บโปรเจ็กต์

เวอร์ชัน 2.1.0-alpha04

25 มกราคม 2019

ฟีเจอร์ใหม่

  • ตอนนี้เมธอด DAO ที่มีการกำกับเนื้อหาด้วย @Query ซึ่งมีคำสั่ง INSERT, UPDATE หรือ DELETE จะแสดงผลประเภทแบบ async Single, Mayble, Completable และ ListenableFuture ได้แล้ว นอกจากนี้ ยังสามารถระงับฟังก์ชันการทำงานได้ด้วย b/120227284

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

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

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

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

เวอร์ชัน 2.1.0-alpha03

4 ธันวาคม 2018

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

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

ฟีเจอร์ใหม่

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

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

  • แก้ไขข้อบกพร่องที่ Room จะพยายามค้นหาตัวสร้างที่มีคอลัมน์ในพร็อพเพอร์ตี้ ignoredColumns ของ @Entity อย่างไม่ถูกต้อง b/119830714
  • แก้ไขข้อบกพร่องที่ Room จะไม่ทําเครื่องหมายพารามิเตอร์ของเมธอด DAO เป็น "สุดท้าย" ในการใช้งานที่สร้างขึ้น b/118015483
  • แก้ไขข้อบกพร่องที่ตัวประมวลผลของ Room จะขัดข้องเมื่อรายงานข้อผิดพลาดในการค้นหาที่มีสัญลักษณ์พิเศษ b/119520136
  • แก้ไขข้อบกพร่องที่ Room ปฏิเสธการใช้งาน Collection อื่นๆ เป็นอาร์กิวเมนต์ของนิพจน์ IN b/119884035
  • แก้ไขข้อบกพร่องที่ LiveData ที่แสดงผลจาก Room จะได้รับการเก็บขยะเมื่อสังเกตการณ์ตลอด ทำให้ไม่แสดงข้อมูลใหม่อีกต่อไป b/74477406
  • อัปเดตการล็อกปิดของ RoomDatabase เพื่อลดการช่วงชิงล็อก b/117900450

เวอร์ชัน 2.1.0-alpha02

30 ตุลาคม 2018

ฟีเจอร์ใหม่

  • เพิ่มการรองรับการอ้างอิง @DatabaseView ใน @Relation b/117680932

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

  • แก้ไขข้อบกพร่องที่ Room จะดำเนินการ I/O ของดิสก์ในเธรดหลักเมื่อสมัครใช้บริการและทิ้งจากประเภทผลลัพธ์ Rx b/117201279
  • แก้ไขข้อบกพร่องที่ Room ไม่พบตัวแปลงประเภทที่เหมาะสมสำหรับช่องในคลาสเอนทิตี Kotlin b/111404868
  • แก้ไขข้อบกพร่องที่ Room จะสร้างโค้ดที่ไม่ถูกต้องสําหรับการใช้งานอินเทอร์เฟซ DAO ที่มีเมธอดเริ่มต้นของ Kotlin ที่ไม่มีอาร์กิวเมนต์ b/117527454
  • อัปเดตโปรแกรมวิเคราะห์ไวยากรณ์ SQLite ของ Room เพื่อแก้ไขปัญหาด้านประสิทธิภาพที่อาจทำให้ใช้เวลาสร้างนาน b/117401230

เวอร์ชัน 2.1.0-alpha01

8 ตุลาคม 2018

ฟีเจอร์ใหม่

  • FTS: ตอนนี้ Room รองรับเอนทิตีที่มีตารางการแมป FTS3 หรือ FTS4 แล้ว ตอนนี้คุณสามารถใส่คำอธิบายประกอบเพิ่มเติม @Fts3 หรือ @Fts4 ลงในชั้นเรียนที่มีคำอธิบายประกอบ @Entity เพื่อประกาศชั้นเรียนที่มีการแมปตารางการค้นหาแบบข้อความทั้งหมดได้แล้ว ตัวเลือก FTS สำหรับการปรับเปลี่ยนเพิ่มเติมจะพร้อมใช้งานผ่านเมธอดของคำอธิบายประกอบ b/62356416
  • มุมมอง: ตอนนี้ Room รองรับการประกาศคลาสเป็นคําค้นหาที่เก็บไว้ หรือที่เรียกว่ามุมมองโดยใช้คําอธิบายประกอบ @DatabaseView แล้ว b/67033276
  • ค่าอัตโนมัติ: ตอนนี้ Room รองรับการประกาศคลาสที่มีคำอธิบายประกอบ AutoValue เป็นเอนทิตีและ POJO แล้ว ตอนนี้คุณประกาศคำอธิบายประกอบ Room @PrimaryKey, @ColumnInfo, @Embedded และ @Relation ในเมธอดนามธรรมของคลาสที่มีคำอธิบายประกอบค่าอัตโนมัติได้แล้ว โปรดทราบว่าคำอธิบายประกอบเหล่านี้ต้องมี @CopyAnnotations ด้วยเพื่อให้ Room เข้าใจอย่างถูกต้อง b/62408420
  • การรองรับประเภทผลลัพธ์ Rx เพิ่มเติม: ตอนนี้เมธอด DAO ที่มีคำอธิบายประกอบ @Insert, @Delete หรือ @Update รองรับประเภทผลลัพธ์ 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 และฐานข้อมูลที่สร้างขึ้นเสร็จสมบูรณ์แล้ว

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

  • ระบุชื่อคลาส/ฟิลด์ในข้อผิดพลาด "ไม่พบตัวรับค่าสำหรับฟิลด์" b/73334503
  • แก้ไข RoomOpenHelper ให้ใช้งานร่วมกับ Room เวอร์ชันเก่าได้ b/110197391

ไลบรารีที่ใช้ก่อน AndroidX

สำหรับ Room เวอร์ชันก่อน AndroidX ให้ใส่ข้อมูลต่อไปนี้

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

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

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

เวอร์ชัน 1.1.1

เวอร์ชัน 1.1.1

19 มิถุนายน 2018

ห้อง 1.1.1 เหมือนกับห้อง 1.1.1-rc1

เวอร์ชัน 1.1.1-rc1

16 พฤษภาคม 2018 เราขอแนะนําอย่างยิ่งให้ใช้ Room 1.1.1-rc1 แทน 1.1.0 หากคุณใช้การย้ายข้อมูล

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

เวอร์ชัน 1.1.0

เวอร์ชัน 1.1.0-beta3

19 เมษายน 2018

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

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

เวอร์ชัน 1.1.0-beta2

5 เมษายน 2018

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

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

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

เวอร์ชัน 1.1.0-beta1

21 มีนาคม 2018

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

  • จากความคิดเห็นในการตรวจสอบ API @RawQuery ไม่ยอมรับการส่ง String เป็นพารามิเตอร์การค้นหาอีกต่อไป คุณต้องใช้ [SupportSQLiteQuery][ref-SupportSQLiteQuery] (ดู [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] เพื่อสร้างอินสแตนซ์ของ [SupportSQLiteQuery][ref-SupportSQLiteQuery] ที่รองรับอาร์กิวเมนต์ได้อย่างง่ายดาย)
  • ตอนนี้เมธอด [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] ของ RoomDatabase.Builder ยอมรับ vararg int แทน vararg Integer แล้ว

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

  • ตอนนี้ [RoomDatabase.clearAllTables][ref-clearAllTables] จะพยายามคืนพื้นที่ให้กับระบบปฏิบัติการโดยการตั้งจุดตรวจสอบ WAL และVACUUMฐานข้อมูล
  • [@RawQuery][ref-RawQuery] ตอนนี้ยอมรับ Pojo สำหรับพร็อพเพอร์ตี้ observedEntities ทั้งหมด ตราบใดที่ Pojo อ้างอิงถึงเอนทิตีอย่างน้อย 1 รายการผ่านช่อง Embedded หรือ Relation b/74041772
  • การแบ่งหน้า: ตอนนี้การใช้งาน DataSource ของ Room จัดการกับความสัมพันธ์แบบหลายตาราง (เช่น ความสัมพันธ์และการรวม) อย่างถูกต้องแล้ว ก่อนหน้านี้ เหตุการณ์เหล่านี้จะทริกเกอร์ผลลัพธ์ใหม่ไม่สำเร็จหรือคอมไพล์ไม่สำเร็จ b/74128314

เวอร์ชัน 1.1.0-alpha1

22 มกราคม 2018

ฟีเจอร์ใหม่

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

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

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