J'ai 2 objets de royaume: l'unité et la sous-unité. L'objet unité a une liste de sous-unités de domaine. Je travaille avec un seul objet Unit. Périodiquement, un nouvel objet Sous-unité est créé et ajouté à la liste de l'Unité, puis j'appelle copyToRealmOrUpdate sur mon objet Unité. Cependant, chaque fois que j'appelle copyToRealmOrUpdate, toutes les sous-unités que l'unité contient sont copiées à nouveau même si elles existent déjà dans la base de données. Cela provoque une croissance rapide de ma base de données. Existe-t-il un moyen d'enregistrer uniquement la dernière sous-unité qui a été ajoutée à la liste chaque fois que j'enregistre l'objet Unité? Merci

0
asd123 16 janv. 2017 à 20:26

2 réponses

Meilleure réponse

Essayez ce code pour créer de nouvelles instances Subunit:

realm.beginTransaction();

Unit unit = realm.where(Unit.class)
                 // write your condition for extracting of Unit object
                 .equalTo("id", unit_id).findFirst();

if(unit == null){
    Log.e(APP_TAG, "Unit " + unit_id + " not found");
    realm.cancelTransaction();
    return;
}

Subunit subunit = realm.createObject(Subunit.class);
// setup subunit fields

unit.getSubunits().add(subunit);

realm.commitTransaction();

Au lieu de créer un objet Unit chaque fois que vous avez besoin de l'obtenir du royaume par une requête particulière et de placer l'instance Subunit directement sur l'objet de requête.

1
XIII-th 16 janv. 2017 à 18:33
  1. Créez-en un Unit - Objet et enregistrez-le avec copyToRealmOrUpdate dans la base de données.
  2. Lorsque vous créez un nouveau Subunit, enregistrez-le avec copyToRealmOrUpdate dans la base de données.
  3. Ensuite, vous pouvez appeler Unit - Object, qui est déjà enregistré dans la base de données, et avec Unit.getSubunits().add(Subunit) vous ajoutez enregistré Subunit dans la base de données à enregistré Unit dans la base de données.

Vous n'avez pas besoin de sauvegarder Unit plusieurs fois dans la base de données.

0
anatoli 16 janv. 2017 à 18:09