Android Modèles de domaine


Exemple

Les modèles de domaine doivent étendre la classe de base RealmObject , ils définissent le schéma de la base de données sous-jacente.

Les types de champs pris en charge sont boolean , byte , caractères short , int , long , float , double , String , Date , byte[] , liens vers d'autres RealmObject RealmList<T extends RealmModel> et RealmList<T extends RealmModel> .

public class Person extends RealmObject {
    @PrimaryKey //primary key is also implicitly an @Index 
                //it is required for `copyToRealmOrUpdate()` to update the object.
    private long id;

    @Index //index makes queries faster on this field
    @Required //prevents `null` value from being inserted
    private String name; 

    private RealmList<Dog> dogs; //->many relationship to Dog

    private Person spouse; //->one relationship to Person

    @Ignore
    private Calendar birthday; //calendars are not supported but can be ignored

    // getters, setters
}

Si vous ajoutez (ou supprimez) un nouveau champ à votre RealmObject (ou si vous ajoutez une nouvelle classe RealmObject ou en supprimez un existant), une migration sera nécessaire. Vous pouvez définir deleteIfMigrationNeeded() dans votre RealmConfiguration.Builder ou définir la migration nécessaire. La migration est également requise lors de l'ajout (ou de la suppression) des @Required , @Index ou @PrimaryKey .

Les relations doivent être définies manuellement, elles ne sont PAS automatiques en fonction des clés primaires.

Depuis la version 0.88.0, il est également possible d'utiliser des champs publics au lieu de champs / getters / setters privés dans les classes RealmObject.

Il est également possible d'implémenter RealmModel au lieu d'étendre RealmObject , si la classe est également annotée avec @RealmClass .

@RealmClass
public class Person implements RealmModel {
    // ...
}

Dans ce cas, les méthodes telles que person.deleteFromRealm() ou person.addChangeListener() sont remplacées par RealmObject.deleteFromRealm(person) et RealmObject.addChangeListener(person) .

Les limitations sont que par un RealmObject , seul RealmObject peut être étendu, et il n'y a pas de prise en charge pour transient champs final , volatile et transient .

Il est important qu'une classe RealmObject gérée ne puisse être modifiée que dans une transaction. Un RealmObject géré ne peut pas être transmis entre les threads.