私は、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
(データバインディングを機能させるために必要です)を拡張すると、Roomで問題が発生するかどうかも知りたいですか? BaseObservable
にはプライベートな一時フィールドが1つあるため、コード生成で問題が発生している可能性があります。
これに対処するための推奨パターンはありますか、またはエンティティ階層をフラット化する必要がありますか?
さらに調査した結果、RoomエンティティはBaseObservable
クラスを拡張しないことが判明しました。 @Ignore
でマークできず、コード生成を中断できないフィールドが含まれています。
部屋は継承に適しています。注釈は期待どおりに処理され、DB操作は正常に動作します。エンティティとPOJOの両方から拡張できます。