一つのプロジェクトで通常の Realm と InMemory Realm を利用した場合に、それぞれの Realm に保存される RealmObject を定義したい
一つのプロジェクトで通常の Realm と InMemory Realm を利用しています。プロジェクトで InMemory Realm のみを利用する場合は、以下のように Realm.setDefaultConfiguration(config) で InMemory Realm をデフォルトにセットすれば RealmObject() を継承した Model のプロパティを変更しても RealmMigrationNeededException は発生しません。
class RealmSampleApplication : Application() {
lateinit var inMemoryRealm: Realm
companion object {
lateinit var instance: RealmSampleApplication
}
init {
instance = this
}
override fun onCreate() {
super.onCreate()
Realm.init(this)
val config: RealmConfiguration = RealmConfiguration.Builder()
.name("inMemory.realm")
.inMemory()
.build()
this.inMemoryRealm = Realm.getInstance(config)
Realm.setDefaultConfiguration(config)
}
}
open class InMemoryRealmObject(
@PrimaryKey open var id: Int = 0
// InMemory Realm のみ利用している場合は、プロパティを追加してもアプリ起動時にエラーにはならない
) : RealmObject()
一部の RealmObject を永続化したくなり、Disk に保存する通常の Realm と InMemory Realm を利用する為、以下のように実装を変更しました。
class RealmSampleApplication : Application() {
lateinit var inMemoryRealm: Realm
companion object {
lateinit var instance: RealmSampleApplication
}
init {
instance = this
}
override fun onCreate() {
super.onCreate()
Realm.init(this)
val config: RealmConfiguration = RealmConfiguration.Builder()
.name("inMemory.realm")
.inMemory()
.build()
this.inMemoryRealm = Realm.getInstance(config)
// Realm.setDefaultConfiguration(config) <- InMemory Realm をデフォルトにセットしない
}
}
// inMemory.realm のみに保存したい
open class InMemoryRealmObject(
@PrimaryKey open var id: Int = 0
) : RealmObject()
// default.realm のみに保存したい
open class DiskRealmObject(
@PrimaryKey open var id: Int = 0
) : RealmObject()
このように実装すると default.realm と inMemory.realm のどちらにも InMemoryRealmObject と DiskRealmObject が定義されることになり InMemoryRealmObject のプロパティを変更すると RealmMigrationNeededException が発生します。
割合的に inMemory.realm を利用するケースが多く、通常の Realm に保存する RealmObject 、 InMemory Realm に保存する RealmObject を定義できたら嬉しいのですが、そのような実装は可能でしょうか。宜しくお願いします。