ห้อง

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

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

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

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

เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ 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

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

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

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

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

คุณจะกำหนดค่าตัวเลือกบางอย่างในปลั๊กอิน Room Gradle ทุกเวอร์ชันไม่ได้ แม้ว่าคอมไพเลอร์ 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-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

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

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

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

รุ่นใหม่นี้มีอาร์ติแฟกต์ใหม่สำหรับปลั๊กอิน Room Gradle รหัส androidx.room ซึ่งแก้ปัญหาต่างๆ ที่มีอยู่ใน 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 หลังจากการย้ายข้อมูลแหล่งที่มาของห้องแชทจาก 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 ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้ Abstract เป็น Getters ของ DAO หรือคำค้นหา DAO ใน 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)

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

  • ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้เชิงนามธรรมเป็น 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)
  • แก้ไขปัญหาที่ทำให้ 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 ใหม่ 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, b/206859668)

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

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

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

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

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

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

เวอร์ชัน 2.4.1

เวอร์ชัน 2.4.1

12 มกราคม 2022

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

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

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

เวอร์ชัน 2.4.0

เวอร์ชัน 2.4.0

15 ธันวาคม 2021

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

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

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

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

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

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

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

  • แก้ไขปัญหาที่ห้องพักไม่เกิดข้อผิดพลาดเมื่อประเภทการแสดงผลของฟังก์ชัน @Transaction เป็นโฟลว์ (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 สำหรับสร้างการย้ายข้อมูลโดยอัตโนมัติตราบใดที่มีการส่งออกสคีมา หากต้องการให้ห้องแชททราบว่าควรสร้างการย้ายข้อมูลอัตโนมัติ พร็อพเพอร์ตี้ใหม่ @Database#autoMigrations สามารถใช้เพื่อประกาศเวอร์ชันที่จะย้ายข้อมูลไปและกลับโดยอัตโนมัติได้ เมื่อห้องแชทต้องการข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนชื่อหรือลบตารางและคอลัมน์ คำอธิบายประกอบ @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
  • จัดทำ Type Converters: ขณะนี้ Room มี API สำหรับให้อินสแตนซ์ของตัวแปลงประเภท เพื่อให้แอปควบคุมการเริ่มต้นได้ หากต้องการทำเครื่องหมายตัวแปลงประเภทที่จะมีให้ห้อง ให้ใช้คำอธิบายประกอบใหม่ @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)

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

  • อนุญาตให้ห้องแชทยอมรับประเภทการแสดงผล 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 อยู่แล้ว ห้องจะจัดลำดับความสำคัญให้ใช้เครื่องมือดังกล่าวแทนตัวเลือกเริ่มต้น (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)

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

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

  • แก้ไขปัญหาที่ห้องมีการตรวจสอบตาราง FTS ที่ประกาศคอลัมน์แถวแนวนอนอย่างไม่ถูกต้อง (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.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 มีคอมมิตเหล่านี้

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

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

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

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

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

  • ห้องแชทจะไม่เผยแพร่ 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 แล้ว ตอนนี้คุณสามารถใส่คำอธิบายประกอบเพิ่มเติม @Fts3 หรือ @Fts4 ลงในชั้นเรียนที่มีคำอธิบายประกอบ @Entity เพื่อประกาศชั้นเรียนที่มีการแมปตารางการค้นหาแบบข้อความทั้งหมดได้แล้ว ตัวเลือก 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 และประเภทการคืนสินค้าของ Guava ListenableFuture และยังสามารถระงับฟังก์ชันได้ด้วย
  • 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 เป็นผู้รับอีกต่อไป การดำเนินการนี้ช่วยป้องกันการข้าม Wrapper coroutineScope { } เพิ่มเติมที่จำเป็นต่อการเรียกใช้รายการต่างๆ ในบล็อกธุรกรรมพร้อมกัน

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

  • แก้ไขข้อบกพร่องที่ 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
  • อัปเดตทรัพยากร Dependency ของห้องของ androidx.sqlite เป็น 1.0.2 ซึ่งมีการแก้ไขสำหรับการจัดการฐานข้อมูลที่เสียหายอย่างถูกต้อง b/124476912

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

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

เวอร์ชัน 2.1.0-alpha04

25 มกราคม 2019

ฟีเจอร์ใหม่

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

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

  • ตอนนี้ห้องแชทจะแสดงข้อผิดพลาดหากเมธอด 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 ในห้อง ซึ่งแก้ปัญหาด้านประสิทธิภาพที่อาจทำให้สร้างใช้เวลานาน 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 ด้วยเพื่อให้ห้องแชทเข้าใจได้อย่างถูกต้อง 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 แล้ว และจะนําออกในห้องแชทเวอร์ชันหลักถัดไป 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 ให้ใส่ทรัพยากร 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 เราขอแนะนําอย่างยิ่งให้ใช้ Room 1.1.1-rc1 แทน 1.1.0 หากคุณใช้การย้ายข้อมูล

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

เวอร์ชัน 1.1.0

เวอร์ชัน 1.1.0-beta3

19 เมษายน 2018

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

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

เวอร์ชัน 1.1.0-beta2

5 เมษายน 2018

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

  • แก้ไขข้อบกพร่องร้ายแรงในการใช้งาน 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 ของ Pojo 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 หากยังไม่ได้ดำเนินการ

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

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