问题描述
错误: java.lang.IllegalStateException:迁移没有正确处理:insta_alerts(org.altruist.BajajExperia.Models.CEInstaViewDetailsDTO)。
预期:
TableInfo{name='insta_alerts',columns={isSeen=Column{name='isSeen',type='INTEGER',affinity='3',notNull=false,primaryKeyPosition=0, defaultValue='null'},smsText=Column{name='smsText',type='TEXT',亲和性='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},sentDate=Column{name='sentDate',亲和性='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},campaign=Column{name='campaign',type='TEXT', 亲和性='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},customerId=Column{name='customerId', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},id=Column{name='id',type='INTEGER',亲和性='3',notNull=false,primaryKeyPosition=1, defaultValue='null'},header=Column{name='header',亲和性='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},priority=Column{name='priority',type='TEXT', 亲和性='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},notificationText=Column{name='notificationText', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},alertMessage=Column{name='alertMessage', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'}},外键=[], 指数=[索引{name='index_insta_alerts_smsText_customerId', unique=true,columns=[smsText,customerId]}]}
找到:
TableInfo{name='insta_alerts',亲和性='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},priority=Column{name='priority',type='TEXT', 亲和性='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},notificationText=Column{name='notificationText', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'},alertMessage=Column{name='alertMessage', type='TEXT',affinity='2',notNull=false,primaryKeyPosition=0, defaultValue='null'}}、foreignKeys=[]、indices=[]}
查询:
database.execsql("CREATE TABLE IF NOT EXISTS insta_alerts(id INTEGER PRIMARY KEY,campaign TEXT,notificationText TEXT,header TEXT,alertMessage TEXT,priority TEXT,sentDate TEXT,smsText TEXT,customerId TEXT,isSeen INTEGER,CONSTRAINT index_insta_alerts_smsText_customerId UNIQUE(smsText,customerId) ON CONFLICT REPLACE)")
型号:
@Entity(
tableName = "insta_alerts",indices =
[Index(
value = ["smsText","customerId"],unique = true
)]
)
@Parcelize
data class CEInstaViewDetailsDTO(
@PrimaryKey(/*autoGenerate = true*/)
@ColumnInfo(name = "id")
@Serializedname("id")
var id: Long? = null,@ColumnInfo(name = "campaign")
@Serializedname("campaign")
var campaign: String? = null,@ColumnInfo(name = "notificationText")
@Serializedname("notificationText")
var notificationText: String? = null,@ColumnInfo(name = "header")
@Serializedname("header")
var header: String? = null,@ColumnInfo(name = "alertMessage")
@Serializedname("alertMessage")
var alertMessage: String? = null,@ColumnInfo(name = "priority")
@Serializedname("priority")
var priority: String? = null,@ColumnInfo(name = "sentDate")
@Serializedname("sentDate")
var sentDate: String? = null,@ColumnInfo(name = "smsText")
@Serializedname("smsText")
var smsText: String? = null,@ColumnInfo(name = "customerId")
@Serializedname("customerId")
var customerId: String? = null,@ColumnInfo(name = "isSeen")
@Serializedname("isSeen")
var isSeen: Int? = null
) : Parcelable
解决方法
您应该将索引创建添加到迁移中,例如
database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS index_insta_alerts_smsText_customerId ON insta_alerts (smsText,customerId)")