UNIQUE constraint failed
JohnsonZZZ opened this issue · 4 comments
大佬你好,我现在引用了你最新的库文件之后,修改表字段,出现了这个问题。
【Failed to restore data from temp table 】BlackList_TEMP
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: BlackList.PKBlackList (code 1555)
下面是我的model类,项目中采用UUID作为唯一区分,没有long类型id,并且转换为byte存到数据库中。不知道问题出现在哪里,求指教。
@entity(nameInDb = "BlackList", createInDb = false)
public class BlackListEntity {
@Property(nameInDb = "PKBlackList")
@Convert(converter = UUID2BytesConverter.class, columnType = byte[].class)
public UUID PKBlackList;
@Property(nameInDb = "PKCompany")
@Convert(converter = UUID2BytesConverter.class, columnType = byte[].class)
public UUID PKCompany;
@Property(nameInDb = "Cellphone")
public String Cellphone;
@Property(nameInDb = "Description")
public String Description;
@Property(nameInDb = "DeleteStatus")
public int DeleteStatus;
@Property(nameInDb = "PKUser")
@Convert(converter = UUID2BytesConverter.class, columnType = byte[].class)
public UUID PKUser;
@Property(nameInDb = "CreateTime")
public String CreateTime;
@Property(nameInDb = "TestValu")
public String TestValu;
@Generated(hash = 465873519)
public BlackListEntity(UUID PKBlackList, UUID PKCompany, String Cellphone, String Description,
int DeleteStatus, UUID PKUser, String CreateTime, String TestValu) {
this.PKBlackList = PKBlackList;
this.PKCompany = PKCompany;
this.Cellphone = Cellphone;
this.Description = Description;
this.DeleteStatus = DeleteStatus;
this.PKUser = PKUser;
this.CreateTime = CreateTime;
this.TestValu = TestValu;
}
@Generated(hash = 1391692307)
public BlackListEntity() {
}
}
下面是我的OpenHelper
@OverRide
public void onUpgrade(Database db, int oldVersion, int newVersion) {
LogUtil.e("MigrationHelper", "from oldVersion:" + oldVersion + "to newVersion:" + newVersion);
MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() {
@OverRide
public void onCreateAllTables(Database db, boolean ifNotExists) {
DaoMaster.createAllTables(db, ifNotExists);
}
@OverRide
public void onDropAllTables(Database db, boolean ifExists) {
DaoMaster.dropAllTables(db, ifExists);
}
}, BlackListEntityDao.class);
}
请查看生成的Dao类中的SQL语句,是由于该字段添加了唯一键约束导致,请尝试移除唯一键约束解决此问题。
如果是之前的项目添加了唯一键约束,然后新版本里面使用了这个框架,并且移除了唯一键约束,也会出现该问题,请问大佬有什么解决思路吗? 我这边先把用户的数据库删除了,然后新建 就好了 但是这样的操作显得有点不够友好。
已解决