Поддерживает ли 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 класса?

Я также хотел бы знать, если расширение BaseObservable (что мне нужно для работы привязки данных) может вызвать проблемы с комнатой? BaseObservable имеет одно частное переходное поле, поэтому, возможно, это вызывает некоторые проблемы с генерацией кода.

есть ли какие-либо рекомендуемые шаблоны для решения этой проблемы, или мне просто нужно сгладить иерархию сущностей?

1 ответов


после дальнейшего расследования выясняется, что объекты комнаты не должны расширять BaseObservable класса. Он содержит поля, которые нельзя пометить @Ignore и сломать генерацию кода.

комната хорошо работает с наследованием. Аннотации обрабатываются должным образом, и операции БД ведут себя нормально. Вы можете продлить как субъект и объект POJO.