Android 如何在以后的升级中添加多个索引来处理room db迁移

Android 如何在以后的升级中添加多个索引来处理room db迁移,android,kotlin,android-room,Android,Kotlin,Android Room,我试图升级room db版本,在上一个版本中,表有一个唯一的索引,当我在当前版本中添加一个索引时,它给了我以下错误 期望值: TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, product

我试图升级room db版本,在上一个版本中,表有一个唯一的索引,当我在当前版本中添加一个索引时,它给了我以下错误

期望值:

TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, productId=Column{name='productId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, columnId=Column{name='columnId', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, distributedProductQuantity=Column{name='distributedProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productData=Column{name='productData', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, storeId=Column{name='storeId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userId=Column{name='userId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productName=Column{name='productName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productImage=Column{name='productImage', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, brandId=Column{name='brandId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, promoProductQuantity=Column{name='promoProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, activityTrackerId=Column{name='activityTrackerId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, syncStatus=Column{name='syncStatus', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId', unique=true, columns=[productId, activityTrackerId]}]}
TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, productId=Column{name='productId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, columnId=Column{name='columnId', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, distributedProductQuantity=Column{name='distributedProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productData=Column{name='productData', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, storeId=Column{name='storeId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userId=Column{name='userId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productName=Column{name='productName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productImage=Column{name='productImage', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, brandId=Column{name='brandId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, promoProductQuantity=Column{name='promoProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, activityTrackerId=Column{name='activityTrackerId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, syncStatus=Column{name='syncStatus', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_SubmitActivityTrackerStoreOrder_productId', unique=true, columns=[productId]}, Index{name='index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId', unique=true, columns=[productId, activityTrackerId]}]}
@Entity(indices = [Index(value = ["productId"], unique = true)])
data class SubmitActivityTrackerStoreOrder(
        var activityTrackerId: String,
        var storeId: String,
        var brandId: String?,
        var productId: String,
        var productData: String,
        var productName: String,
        var promoProductQuantity: String,
        var distributedProductQuantity: String,
        var syncStatus: String,
        var productImage: String,
        var userId: String
) {
    @PrimaryKey(autoGenerate = true)
    var columnId: Int? = null
}
    
@Entity(indices = [Index(value = ["productId", "activityTrackerId"], unique = true)])
data class SubmitActivityTrackerStoreOrder(
        var activityTrackerId: String,
        var storeId: String,
        var brandId: String?,
        var productId: String,
        var productData: String,
        var productName: String,
        var promoProductQuantity: String,
        var distributedProductQuantity: String,
        var syncStatus: String,
        var productImage: String,
        var orderType: String?,
        var userId: String
) {
    @PrimaryKey(autoGenerate = true)
    var columnId: Int? = null
}
_db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId` ON `SubmitActivityTrackerStoreOrder` (`productId`, `activityTrackerId`)");
找到:

TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, productId=Column{name='productId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, columnId=Column{name='columnId', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, distributedProductQuantity=Column{name='distributedProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productData=Column{name='productData', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, storeId=Column{name='storeId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userId=Column{name='userId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productName=Column{name='productName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productImage=Column{name='productImage', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, brandId=Column{name='brandId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, promoProductQuantity=Column{name='promoProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, activityTrackerId=Column{name='activityTrackerId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, syncStatus=Column{name='syncStatus', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId', unique=true, columns=[productId, activityTrackerId]}]}
TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, productId=Column{name='productId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, columnId=Column{name='columnId', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, distributedProductQuantity=Column{name='distributedProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productData=Column{name='productData', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, storeId=Column{name='storeId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userId=Column{name='userId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productName=Column{name='productName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productImage=Column{name='productImage', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, brandId=Column{name='brandId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, promoProductQuantity=Column{name='promoProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, activityTrackerId=Column{name='activityTrackerId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, syncStatus=Column{name='syncStatus', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_SubmitActivityTrackerStoreOrder_productId', unique=true, columns=[productId]}, Index{name='index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId', unique=true, columns=[productId, activityTrackerId]}]}
@Entity(indices = [Index(value = ["productId"], unique = true)])
data class SubmitActivityTrackerStoreOrder(
        var activityTrackerId: String,
        var storeId: String,
        var brandId: String?,
        var productId: String,
        var productData: String,
        var productName: String,
        var promoProductQuantity: String,
        var distributedProductQuantity: String,
        var syncStatus: String,
        var productImage: String,
        var userId: String
) {
    @PrimaryKey(autoGenerate = true)
    var columnId: Int? = null
}
    
@Entity(indices = [Index(value = ["productId", "activityTrackerId"], unique = true)])
data class SubmitActivityTrackerStoreOrder(
        var activityTrackerId: String,
        var storeId: String,
        var brandId: String?,
        var productId: String,
        var productData: String,
        var productName: String,
        var promoProductQuantity: String,
        var distributedProductQuantity: String,
        var syncStatus: String,
        var productImage: String,
        var orderType: String?,
        var userId: String
) {
    @PrimaryKey(autoGenerate = true)
    var columnId: Int? = null
}
_db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId` ON `SubmitActivityTrackerStoreOrder` (`productId`, `activityTrackerId`)");
第一次迁移中的数据库实体:

TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, productId=Column{name='productId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, columnId=Column{name='columnId', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, distributedProductQuantity=Column{name='distributedProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productData=Column{name='productData', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, storeId=Column{name='storeId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userId=Column{name='userId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productName=Column{name='productName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productImage=Column{name='productImage', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, brandId=Column{name='brandId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, promoProductQuantity=Column{name='promoProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, activityTrackerId=Column{name='activityTrackerId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, syncStatus=Column{name='syncStatus', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId', unique=true, columns=[productId, activityTrackerId]}]}
TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, productId=Column{name='productId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, columnId=Column{name='columnId', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, distributedProductQuantity=Column{name='distributedProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productData=Column{name='productData', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, storeId=Column{name='storeId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userId=Column{name='userId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productName=Column{name='productName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productImage=Column{name='productImage', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, brandId=Column{name='brandId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, promoProductQuantity=Column{name='promoProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, activityTrackerId=Column{name='activityTrackerId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, syncStatus=Column{name='syncStatus', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_SubmitActivityTrackerStoreOrder_productId', unique=true, columns=[productId]}, Index{name='index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId', unique=true, columns=[productId, activityTrackerId]}]}
@Entity(indices = [Index(value = ["productId"], unique = true)])
data class SubmitActivityTrackerStoreOrder(
        var activityTrackerId: String,
        var storeId: String,
        var brandId: String?,
        var productId: String,
        var productData: String,
        var productName: String,
        var promoProductQuantity: String,
        var distributedProductQuantity: String,
        var syncStatus: String,
        var productImage: String,
        var userId: String
) {
    @PrimaryKey(autoGenerate = true)
    var columnId: Int? = null
}
    
@Entity(indices = [Index(value = ["productId", "activityTrackerId"], unique = true)])
data class SubmitActivityTrackerStoreOrder(
        var activityTrackerId: String,
        var storeId: String,
        var brandId: String?,
        var productId: String,
        var productData: String,
        var productName: String,
        var promoProductQuantity: String,
        var distributedProductQuantity: String,
        var syncStatus: String,
        var productImage: String,
        var orderType: String?,
        var userId: String
) {
    @PrimaryKey(autoGenerate = true)
    var columnId: Int? = null
}
_db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId` ON `SubmitActivityTrackerStoreOrder` (`productId`, `activityTrackerId`)");
在第一次迁移中,我使用的是

_db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_SubmitActivityTrackerStoreOrder_productId` ON `SubmitActivityTrackerStoreOrder` (`productId`)");
第二次迁移中的数据库实体:

TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, productId=Column{name='productId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, columnId=Column{name='columnId', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, distributedProductQuantity=Column{name='distributedProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productData=Column{name='productData', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, storeId=Column{name='storeId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userId=Column{name='userId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productName=Column{name='productName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productImage=Column{name='productImage', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, brandId=Column{name='brandId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, promoProductQuantity=Column{name='promoProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, activityTrackerId=Column{name='activityTrackerId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, syncStatus=Column{name='syncStatus', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId', unique=true, columns=[productId, activityTrackerId]}]}
TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, productId=Column{name='productId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, columnId=Column{name='columnId', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, distributedProductQuantity=Column{name='distributedProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productData=Column{name='productData', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, storeId=Column{name='storeId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userId=Column{name='userId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productName=Column{name='productName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productImage=Column{name='productImage', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, brandId=Column{name='brandId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, promoProductQuantity=Column{name='promoProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, activityTrackerId=Column{name='activityTrackerId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, syncStatus=Column{name='syncStatus', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_SubmitActivityTrackerStoreOrder_productId', unique=true, columns=[productId]}, Index{name='index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId', unique=true, columns=[productId, activityTrackerId]}]}
@Entity(indices = [Index(value = ["productId"], unique = true)])
data class SubmitActivityTrackerStoreOrder(
        var activityTrackerId: String,
        var storeId: String,
        var brandId: String?,
        var productId: String,
        var productData: String,
        var productName: String,
        var promoProductQuantity: String,
        var distributedProductQuantity: String,
        var syncStatus: String,
        var productImage: String,
        var userId: String
) {
    @PrimaryKey(autoGenerate = true)
    var columnId: Int? = null
}
    
@Entity(indices = [Index(value = ["productId", "activityTrackerId"], unique = true)])
data class SubmitActivityTrackerStoreOrder(
        var activityTrackerId: String,
        var storeId: String,
        var brandId: String?,
        var productId: String,
        var productData: String,
        var productName: String,
        var promoProductQuantity: String,
        var distributedProductQuantity: String,
        var syncStatus: String,
        var productImage: String,
        var orderType: String?,
        var userId: String
) {
    @PrimaryKey(autoGenerate = true)
    var columnId: Int? = null
}
_db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId` ON `SubmitActivityTrackerStoreOrder` (`productId`, `activityTrackerId`)");
在第二次迁移中,我使用:

TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, productId=Column{name='productId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, columnId=Column{name='columnId', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, distributedProductQuantity=Column{name='distributedProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productData=Column{name='productData', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, storeId=Column{name='storeId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userId=Column{name='userId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productName=Column{name='productName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productImage=Column{name='productImage', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, brandId=Column{name='brandId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, promoProductQuantity=Column{name='promoProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, activityTrackerId=Column{name='activityTrackerId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, syncStatus=Column{name='syncStatus', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId', unique=true, columns=[productId, activityTrackerId]}]}
TableInfo{name='SubmitActivityTrackerStoreOrder', columns={orderType=Column{name='orderType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, productId=Column{name='productId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, columnId=Column{name='columnId', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, distributedProductQuantity=Column{name='distributedProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productData=Column{name='productData', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, storeId=Column{name='storeId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userId=Column{name='userId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productName=Column{name='productName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, productImage=Column{name='productImage', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, brandId=Column{name='brandId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, promoProductQuantity=Column{name='promoProductQuantity', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, activityTrackerId=Column{name='activityTrackerId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, syncStatus=Column{name='syncStatus', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_SubmitActivityTrackerStoreOrder_productId', unique=true, columns=[productId]}, Index{name='index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId', unique=true, columns=[productId, activityTrackerId]}]}
@Entity(indices = [Index(value = ["productId"], unique = true)])
data class SubmitActivityTrackerStoreOrder(
        var activityTrackerId: String,
        var storeId: String,
        var brandId: String?,
        var productId: String,
        var productData: String,
        var productName: String,
        var promoProductQuantity: String,
        var distributedProductQuantity: String,
        var syncStatus: String,
        var productImage: String,
        var userId: String
) {
    @PrimaryKey(autoGenerate = true)
    var columnId: Int? = null
}
    
@Entity(indices = [Index(value = ["productId", "activityTrackerId"], unique = true)])
data class SubmitActivityTrackerStoreOrder(
        var activityTrackerId: String,
        var storeId: String,
        var brandId: String?,
        var productId: String,
        var productData: String,
        var productName: String,
        var promoProductQuantity: String,
        var distributedProductQuantity: String,
        var syncStatus: String,
        var productImage: String,
        var orderType: String?,
        var userId: String
) {
    @PrimaryKey(autoGenerate = true)
    var columnId: Int? = null
}
_db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_SubmitActivityTrackerStoreOrder_productId_activityTrackerId` ON `SubmitActivityTrackerStoreOrder` (`productId`, `activityTrackerId`)");

你能分享你的AppDatabase代码吗?您是如何处理迁移的?