web-dev-qa-db-fra.com

Salle Android: @ Ignor vs Transient

Ces deux entités sont-elles interchangeables dans le contexte de l'entité de base de données de Room ou, si non, quelles sont les différences entre elles?

5
Pavlus

@Ignore est une annotation spécifique à la salle, indiquant que cette dernière doit ignorer ce champ ou cette méthode.

transient est une construction Java, indiquant que ce champ ne doit pas être sérialisé dans la sérialisation Java standard . Room arrive traiter ceci de la même manière que @Ignore par défaut . C'est principalement le cas pour les cas où vous héritez d'une classe qui utilise transient et que vous ne contrôlez pas cette classe (par exemple, elle provient d'une bibliothèque).

Pour votre propre code, si vous n'utilisez pas la sérialisation Java, je vous recommande de coller avec @Ignore pour les champs. transient n'est pas un mot clé disponible pour une méthode. Pour dire à Room d'ignorer certains constructeurs, vous n'avez d'autre choix que d'utiliser @Ignore.

14
CommonsWare

Ajout à la réponse de CommonsWare


transient n'est pas une bonne option pour ignorer les champs de Room car CommonsWare a répondu. Il créera un bloqueur lorsque le même modal est utilisé pour analyser les données du serveur et les stocker dans la base de données.

Supposons que vous ayez une classe modale MyModal.Java comme ci-dessous

public static class MyModal {

    @SerializedName(“intField”)
    public int intField;
    @SerializedName(“strField”)
    public String strField;
    @SerializedName(“booleanField”)
    public boolean booleanField;
}

Si vous ne voulez PAS SAUVEGARDER booleanField dans la base de données, et si vous avez modifié ce champ en tant que

  1. transient: Il ignorera ce champ lors de la sauvegarde dans la base de données, MAIS il ignorera également ce champ lors de l’analyse des données provenant du serveur. 
  2. @Ignore: Ce champ ne sera ignoré que lors de l'insertion de données dans la base de données, mais ce champ participera à l'analyse json.
1
Pankaj Kumar