การย้ายฐานข้อมูลล้มเหลวเนื่องจากข้อจำกัดเฉพาะในห้อง

ฉันมีข้อจำกัดเฉพาะในตารางหนึ่งในฐานข้อมูลเก่า ในขณะที่ย้ายไปยังห้อง ฉันได้สร้างตารางใหม่ตามคำแนะนำที่ให้ไว้ใน [ลิงก์] [1] และใช้ข้อจำกัดเฉพาะโดยใช้คีย์เวิร์ด "indices" ในคลาสเอนทิตี "TaskDetail" และจัดให้มีการโยกย้ายที่ว่างเปล่า ขณะรันการทดสอบการย้ายข้อมูล ฉันได้รับข้อผิดพลาดที่เกี่ยวข้องกับข้อจำกัดเฉพาะดังที่กล่าวไว้ด้านล่าง ฉันทำอะไรผิดหรือเปล่า??

สคีมาฐานข้อมูล

String CREATE_TABLE_TASK = "CREATE TABLE IF NOT EXISTS "+TASK+
            " (`task_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," +
            "`task_note` TEXT," +
            "`status` INTEGER NOT NULL)";


    String CREATE_TABLE_TASK_DETAIL = "CREATE TABLE IF NOT EXISTS "+TASK_DETAIL+
            " (`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," +
            "`detail` TEXT NOT NULL UNIQUE)";

ตารางเอนทิตีห้อง

@Entity(tableName = "task_master")
        public class Task {

            @ColumnInfo(name = "task_id")
            @PrimaryKey(autoGenerate = true)
            @NonNull
            private int taskId;

            @ColumnInfo(name = "task_note")
            private String task;

            private @TaskStatus
            int status;

        }

//TOKEN DETAIL TABLE
@Entity(tableName = "task_detail",indices ={@Index(name = "detail",value = "detail",unique = true)})
    public class TaskDetail {

        @PrimaryKey(autoGenerate = true)
        private int id;

        @NonNull
        private String detail;

    }

คลาสฐานข้อมูลห้อง

@Database(entities = {Task.class, TaskDetail.class},version = 2,exportSchema = true)
public abstract class AppDatabase extends RoomDatabase{

    private static final Object sObject = new Object();
    private static AppDatabase sInstance;

    public abstract TaskDao getTaskDao();

    public static AppDatabase getInstance(Context context){

        if(sInstance == null){
            synchronized (sObject){
                if(sInstance == null){
                    sInstance = Room.databaseBuilder(context,AppDatabase.class,"task.db")
                            .allowMainThreadQueries()
                            .build();
                }
            }
        }
        return sInstance;
    }
}

ข้อผิดพลาด

expacted:TableInfo{name='task_detail', columns={id=Column{name='id', type='INTEGER', notNull=true, primaryKeyPosition=1}, detail=Column{name='detail', type='TEXT', notNull=true, primaryKeyPosition=0}}, foreignKeys=[], indices=[Index{name='detail', unique=true, columns=[detail]}]}

found:TableInfo{name='task_detail', columns={id=Column{name='id', type='INTEGER', notNull=true, primaryKeyPosition=1}, detail=Column{name='detail', type='TEXT', notNull=true, primaryKeyPosition=0}}, foreignKeys=[], indices=[]}

person Pinakin Kansara    schedule 07.12.2017    source แหล่งที่มา
comment
มีข้อผิดพลาดที่คล้ายกันที่นี่ โดยใช้ไฟล์ db เดียวกันทุกประการ แต่ของฉันถูกคาดหวัง: indices=[] found: indices=null   -  person live-love    schedule 02.01.2018


คำตอบ (1)


คุณต้องกำหนดดัชนียูนิกซ์สำหรับตารางของคุณ สำหรับ task_master หากคีย์เฉพาะของคุณคือ task_id ให้เพิ่มดังนี้:

database.execSQL("CREATE UNIQUE INDEX `index_task_master_task_id` ON `task_master` (`task_id`)");

เช่นเดียวกับตาราง task_detail

person Sara    schedule 05.07.2018