【问题标题】:Room database handling inheritance in POJO and multiple tablesPOJO和多个表中的房间数据库处理继承
【发布时间】:2019-01-30 10:53:01
【问题描述】:

我从 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 不匹配。

Expected Table Info 包含发件人、正文、日期等列,而我的 EventTable 没有这些列。

如何迁移继承自 Sms 但表格未展平的 Event 类?

附:我无法展平 EventTable,因为即使没有 Event,SmsTable 也存在,我还需要将 Sms 转换为 Entity。

【问题讨论】:

    标签: android-sqlite database-migration android-room


    【解决方案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;
    
        }
    

    【讨论】:

      猜你喜欢
      • 2016-12-04
      • 2018-05-24
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多