0

コンテキスト: isolateLocation と Susceptibilities (1-多) には、Drug と Susceptibilities (1-多) と同様に 1 対多の関係があります。すべてがRealmObjectsおよびIsolateLocationであり、Drugには感受性のRealmListが含まれています。すべての isolateLocation のすべての薬物に対して感受性が作成され、この感受性が対応する IsolateLocation 感受性リストおよび薬物感受性リストに追加されます。

問題:最初の感受性オブジェクトは両方のモデル (Drug & IsolateLocation) のリストに正しく追加されますが、作成される次の感受性は、それを薬物感受性リストに追加した直後に、薬物モデルに正しく追加されます。 IsolateLocation 感受性リストが削除されました。したがって、最後に、薬物感受性は複数の感受性で正しいですが、IsolateLocation 感受性リストには 1 つしかありません。

生データ: http://imgur.com/a/iTPY8

コード:

for (Drug drug : drugList){
    Susceptibility susceptibility = new Susceptibility();
    susceptibility.setId(UUID.randomUUID().toString());
    susceptibility.setDrug(drug);
    susceptibility.setReference(parsedCsv[drug.getId()+1]);
    susceptibility.setSusceptibilityValue(parsedCsv[drug.getId()]);
    susceptibility.setIsolateLocation(isolateLocation);
    addSusceptibilityToRealm(isolateLocation, drug, susceptibility);
    }


private void addSusceptibilityToRealm(IsolateLocation isolateLocation, Drug drug, Susceptibility susceptibility) {
    realm.beginTransaction();
    Drug drugEntry = realm.where(Drug.class).equalTo("id", drug.getId()).findFirst();
    drugEntry.getSusceptibilities().add(susceptibility);

    IsolateLocation isolateLocationEntry = realm.where(IsolateLocation.class).equalTo("id", isolateLocation.getId()).findFirst();
    isolateLocationEntry.getSusceptibilities().add(susceptibility);
    realm.commitTransaction();
}
4

3 に答える 3

0

およびにレルム管理 Susceptibilityインスタンスを挿入する必要があります。つまり、メソッドで新しいインスタンスを作成する必要があります:drugEntry.getSusceptibilities()isolateLocationEntry.getSusceptibilities()Susceptibilityrealm.createObject()

for (Drug drug : drugList){
    String id = UUID.randomUUID().toString();
    realm.beginTransaction();
    // Create a new object
    Susceptibility susceptibility = realm.createObject(Susceptibility.class, id);
    /*
    setup properties of susceptibility instances
    ....
    */
    addSusceptibilityToRealm(isolateLocation, drug, susceptibility);
    realm.commitTransaction();
}

または、アンマネージrealm.copyToRealm()インスタンスを andに挿入する前に、呼び出しによってレルムに挿入する必要がdrugEntry.getSusceptibilities()ありisolateLocationEntry.getSusceptibilities()ます。

private void addSusceptibilityToRealm(IsolateLocation isolateLocation, Drug drug, Susceptibility susceptibility) {
    realm.beginTransaction();
    // Copy the object to Realm. Any further changes must happen on susceptibility
    Susceptibility susceptibility = realm.copyToRealm(susceptibility);

    Drug drugEntry = realm.where(Drug.class).equalTo("id", drug.getId()).findFirst();
    drugEntry.getSusceptibilities().add(susceptibility);

    IsolateLocation isolateLocationEntry = realm.where(IsolateLocation.class).equalTo("id", isolateLocation.getId()).findFirst();
    isolateLocationEntry.getSusceptibilities().add(susceptibility);
    realm.commitTransaction();
}

管理対象オブジェクトの作成に関する詳細情報は、公式ドキュメントこの回答を読むことができます。

于 2017-01-26T03:57:37.250 に答える