31157


一つのプロジェクトで通常の Realm と InMemory Realm を利用しています。プロジェクトで InMemory Realm
のみを利用する場合は、以下のように Realm.setDefaultConfiguration(config) で InMemory Realm
をデフォルトにセットすれば RealmObject() を継承した Model のプロパティを変更しても
RealmMigrationNeededException は発生しません。

[code]

    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()
    
[/code]

一部の RealmObject を永続化したくなり、Disk に保存する通常の Realm と InMemory Realm
を利用する為、以下のように実装を変更しました。

[code]

    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()
    
[/code]

このように実装すると default.realm と inMemory.realm のどちらにも InMemoryRealmObject と
DiskRealmObject が定義されることになり InMemoryRealmObject のプロパティを変更すると
RealmMigrationNeededException が発生します。

割合的に inMemory.realm を利用するケースが多く、通常の Realm に保存する RealmObject 、 InMemory Realm
に保存する RealmObject を定義できたら嬉しいのですが、そのような実装は可能でしょうか。宜しくお願いします。


CC BY-SA 3.0
2016-12-08T08:19:41.690
31018
2016-12-14T19:10:13.680
19558
question
realm
一つのプロジェクトで通常の Realm と InMemory Realm を利用した場合に、それぞれの Realm に保存される RealmObject を定義したい


<https://realm.io/jp/docs/java/latest/#section-40> のスキーマの節にあるように、  
RealmModule を使用することで各Realm内で使用するモデルクラスをしていすることができます。  
これでマイグレーションを避けることができます。

InMemory 用と Disk 用にそれぞれ必要なモデルクラスを含んだモジュールを定義して  
各RealmConfiguration作成の際に指定してください。


CC BY-SA 3.0
2016-12-14T19:10:13.680
31157
2016-12-14T19:10:13.680
319
31018
answer