从sqlite迁移到Room时遇到问题。我有1个父类和1个子类以及2个与之对应的表。
我的继承如下
public class Sms {
int _id;
String sender;
String body;
Date date;
}
public class Event extends Sms {
String eventName;
long eventDueDate;
}
我的表为
SmsTable >>
_id INTEGER NOT NULL primary key autoincrement,
sender TEXT not null,
body TEXT not null,
date INTEGER not null
EventTable >>
_id INTEGER NOT NULL primary key autoincrement,
sms_id INTEGER,
eventName TEXT not null,
eventDueDate INTEGER
现在,当我将Event定义为@Entity(tableName =“ EventTable”)时,它给我一个错误,即Migration无法按预期的TableInfo正确处理事件,并且发现TableInfo不匹配。
“期望的表信息”具有发件人,正文,日期列,而我的EventTable没有这些列。
如何迁移已继承自Sms但表未展平的Event类?
P.s。我无法将EventTable展平,因为即使没有事件,SmsTable仍然存在,我也需要将Sms转换为Entity。
答案 0 :(得分:1)
IgnoredColumns :如果实体从父实体继承字段,通常更容易使用@Entity属性的ignoredColumns属性。
foreignKeys :即使您不能使用直接关系,Room仍允许您定义实体之间的外键约束。
@Entity(tableName = "EventTable", ignoredColumns = "sender","body","date",
foreignKeys = @ForeignKey(entity = Sms.class,
parentColumns = "id" , childColumns = "sms_id"))
public class Event extends Sms {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "_id")
public int id;
@ColumnInfo(name = "sms_id")
public int smsId;
public String evwntName;
public long eventDuedate;
}