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