Room 数据库处理 POJO 和多个表中的继承
Room database handling inheritance in POJO and multiple tables
我在从 sqlite 迁移到 Room 时遇到问题。我有1个parent和1个childclass和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 并找到 Table信息不匹配。
预期 Table 信息包含发件人、正文、日期列,而我的事件Table 没有。
如何迁移我的事件 class,它继承自 Sms,但表格没有展平?
P.s。我无法展平 EventTable,因为即使没有 Event,SmsTable 也存在,我需要将 Sms 也转换为 Entity。
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;
}
我在从 sqlite 迁移到 Room 时遇到问题。我有1个parent和1个childclass和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 并找到 Table信息不匹配。
预期 Table 信息包含发件人、正文、日期列,而我的事件Table 没有。
如何迁移我的事件 class,它继承自 Sms,但表格没有展平?
P.s。我无法展平 EventTable,因为即使没有 Event,SmsTable 也存在,我需要将 Sms 也转换为 Entity。
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;
}