Sala de Android: @Ignorar vs Transitorio

2 minutos de lectura

¿Son esos dos intercambiables en el contexto de la entidad de la base de datos Room o, si no, cuáles son las diferencias entre ellos?

@Ignore es una anotación específica de Room, que dice que Room debe ignorar ese campo o método.

transient es una construcción de Java, lo que indica que este campo no debe serializarse en la serialización de Java estándar. Habitación sucede para tratar esto de manera similar a @Ignore por defecto. En su mayoría, eso está ahí para los casos en los que heredas de alguna clase que usa transient y no controlas esa clase (por ejemplo, es de una biblioteca).

Para su propio código, si no está utilizando la serialización de Java, le recomiendo seguir con @Ignore para los campos. transient no es una palabra clave disponible para un método, por lo que para decirle a Room que ignore ciertos constructores, no tiene más remedio que usar @Ignore.

Agregando a la respuesta de CommonsWare


transient no es una buena opción para ignorar los campos de Room como respondió CommonsWare. Creará un bloqueador cuando se utilice el mismo modal para analizar datos del servidor y almacenarlos en la base de datos.

Supongamos que tienes una clase modal. MyModal.java como a continuación

public static class MyModal {

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

Si desea NO GUARDAR booleanField en la base de datos, y si modificó ese campo como

  1. transient : Ignorará este campo al guardar en la base de datos, PERO también ignorará este campo al analizar los datos que provienen del servidor.
  2. @Ignore : solo ignorará este campo al insertar datos en la base de datos, pero este campo participará en el análisis json.

  • ¿Y cómo hago para ignorar este campo mientras analizo json, pero lo incluyo en la base de datos?

    -Ali Kazi

    30 de noviembre de 2018 a las 4:48

  • Encontré la respuesta a mi propio comentario: @ColumnInfo(name = "show_id") public transient String showId;

    -Ali Kazi

    30 de noviembre de 2018 a las 5:08


  • La mayoría de las veces necesitamos lo contrario de esto.

    – Brill Pappin

    12 de febrero de 2021 a las 15:49

¿Ha sido útil esta solución?