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;

    }