いくつかのコードをリファクタリングして、アーキテクチャデータベースからルームデータベースを使用するようにいくつかのアーキテクチャを移動しようとします。ネストされたコレクションを使用してエンティティをモデル化する方法
私はしばしばキャッシュからそれを取得するようなオブジェクトを持っています。私はこのような構造でデータベースをモデル化する
public class LocationEvents {
private Map<NexoIdentifier, Date> mDeviceFirstSeenDates;
private ArrayDeque<LocationGeoEvent> mGeoEvents;
private ArrayDeque<LocationRSSIEvent> mRSSIEvents;
private Map<NexoIdentifier, ScoredLocationEvent> mHighestScores;
///Some methods
}
:ように見えるものをここで 。 LocationGeoEvent、LocationRSSIEvent、ScoredLocationEventなどのエンティティが存在します。
彼らは次のようになり:
public class LocationGeoEvent {
private double mLongitude;
private double mLatitude;
private double mAccuracy;
private Date mTimestamp;
}
public class LocationRSSIEvent {
private int mRSSI;
private NexoIdentifier mNexoIdentifier;
private Date mTimestamp;
}
public class ScoredLocationEvent {
private float mScore;
private NexoIdentifier mNexoIdentifier;
private LocationRSSIEvent mLocationRSSIEvent;
private LocationGeoEvent mLocationGeoEvent;
private Date mScoreCalculatedTime;
private boolean mSent;
private boolean mPreviousSent;
}
NexoIdentifierは、単純なPOJOです:
class NexoIdentifier {
abstract val partialSerialID: String
abstract val id: String
abstract val countryAndManufacturer: String
}
それでは、どのように私はルームを使用して関係を作ることができますか? LocationEventエンティティを一度作成することも可能ですか?例えば、私は内側に入れ子にされているこのすべてのリストでLocationEventを取得できるようにしたいと思います。あるいはこれを行う別の方法がありますか? LocationEvents(DeviceFirstSeenDates、HighestScores)内の2つのマップを他のものと関連して2つの別個のエンティティとしてモデル化する方法も正確には分かりませんか?しかし、どのように正確に?私は本当にこの例では助けに感謝します、私は本当にあなたが使用埋め込みするか
UPDATE
@Entity(tableName = "location_events")
data class LocationEvents(
@PrimaryKey(autoGenerate = true)
val id: Long = 0,
@Embedded(prefix = "device") val mDeviceFirstSeenDates: Map<NexoIdentifier, Date> = HashMap(),
@Embedded(prefix = "events") val mGeoEvents: ArrayDeque<LocationGeoEvent> = ArrayDeque(),
val mRSSIEvents: ArrayDeque<LocationRSSIEvent> = ArrayDeque(),
val mHighestScores: Map<NexoIdentifier, ScoredLocationEvent> = HashMap()
) {
constructor() : this(0L, hashMapOf<NexoIdentifier, Date>(),
ArrayDeque(), ArrayDeque(), hashMapOf<NexoIdentifier, ScoredLocationEvent>()
)
}
Error:error: Entities and Pojos must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).
ありがとうございます。私の更新版を見ることはできますか?私はKotlinを使っていると言いました。私はコンストラクタなしでエラーがありますが、現在は – Konrad
です。 ASを開始 –