Room 是否支持实体继承?
Does Room support entity inheritance?
我正在尝试将我们的项目迁移到使用 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
}
当我尝试编译我的项目时,它失败了,没有具体错误。
如果我尝试用平面实体层次结构编译它,一切都很好。
所以,我的主要问题是:
Room 是否支持实体继承?它能否从父 Entity
class 获取列定义?
我还想知道扩展 BaseObservable
(我需要让数据绑定正常工作)是否会导致 Room 出现问题? BaseObservable
有一个私有瞬态字段,所以这可能会导致代码生成出现一些问题。
是否有任何推荐的模式来处理这个问题,或者我是否只需要展平我的实体层次结构?
进一步调查后发现房间实体不应扩展 BaseObservable
class。它包含无法用 @Ignore
标记并破坏代码生成的字段。
Room 与继承配合得很好。注释按预期处理,数据库操作正常运行。您可以从实体和 POJO 进行扩展。
我正在尝试将我们的项目迁移到使用 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
}
当我尝试编译我的项目时,它失败了,没有具体错误。
如果我尝试用平面实体层次结构编译它,一切都很好。
所以,我的主要问题是:
Room 是否支持实体继承?它能否从父 Entity
class 获取列定义?
我还想知道扩展 BaseObservable
(我需要让数据绑定正常工作)是否会导致 Room 出现问题? BaseObservable
有一个私有瞬态字段,所以这可能会导致代码生成出现一些问题。
是否有任何推荐的模式来处理这个问题,或者我是否只需要展平我的实体层次结构?
进一步调查后发现房间实体不应扩展 BaseObservable
class。它包含无法用 @Ignore
标记并破坏代码生成的字段。
Room 与继承配合得很好。注释按预期处理,数据库操作正常运行。您可以从实体和 POJO 进行扩展。