Room是否支持实体继承?

Dan*_*iev 19 android-room

我正在尝试将我们的项目迁移到使用Room,顺便说一句,我觉得这是一个很棒的进步.

我有以下结构:

public class Entity extends BaseObservable {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "_id", typeAffinity = ColumnInfo.INTEGER) 
    private long mId;

    @ColumnInfo(name = "is_dirty")
    @TypeConverters(BooleanTypeConverter.class)
    private boolean mIsDirty;

    // default constructor and accessors omitted for brevity
}

@Entity(tableName = "some_entities")
public class SomeEntity extends Entity {

    @ColumnInfo(name = "type", typeAffinity = ColumnInfo.TEXT)        
    private String mType;

    @ColumnInfo(name = "timestamp", typeAffinity = ColumnInfo.INTEGER)
    private long mTimestamp;

    // constructor, accessors
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译我的项目时,它失败并没有特定的错误.

如果我尝试使用扁平实体层次结构编译它,一切都很好.

所以,我的主要问题是:Room是否支持实体继承?它是否能够从父Entity类中获取列定义?

我还想知道扩展BaseObservable(我需要使数据绑定工作)是否会导致Room出现问题?BaseObservable有一个私有瞬态字段,所以这可能会导致代码生成的一些问题.

是否有任何推荐的模式来处理这个问题,或者我是否只需要压缩我的实体层次结构?

Dan*_*iev 15

经过进一步调查后发现,房间实体不应该延长BaseObservable课程.它包含无法标记的字段@Ignore并破坏代码生成.

房间适用于继承.注释按预期处理,DB操作正常运行.您可以从实体和POJO扩展.

  • 您能否提供一些示例代码片段,您是如何设置继承实体并从数据库查询扩展实体的? (2认同)