Android Room: @Ignore vs Transient

Являются ли эти два взаимозаменяемыми в контексте объекта базы данных Room, или, если нет, в чем между ними разница?


person Pavlus    schedule 08.12.2017    source источник
comment
Я не могу найти ссылку на переходный процесс в Room. developer.android.com/training/data-storage/room/   -  person joao86    schedule 08.12.2017
comment
transient — это встроенное ключевое слово, а @ignore добавляется Room   -  person Zoe    schedule 08.12.2017


Ответы (2)


@Ignore — это аннотация для комнаты, говорящая, что комната должна игнорировать это поле или метод.

transient — это конструкция Java, указывающая, что это поле не следует сериализовать в стандартной сериализации Java. Комната случайно обрабатывает это аналогично @Ignore по умолчанию. В основном это происходит в случаях, когда вы наследуете от какого-то класса, который использует transient, и вы не контролируете этот класс (например, он из библиотеки).

Для вашего собственного кода, если вы не используете сериализацию Java, я рекомендую придерживаться @Ignore для полей. transient не является доступным ключевым словом для метода, поэтому, чтобы указать Room игнорировать определенные конструкторы, у вас нет другого выбора, кроме как использовать @Ignore.

person CommonsWare    schedule 08.12.2017

Добавление к ответу CommonsWare


transient не является хорошим вариантом для игнорирования полей для комнаты, как ответил CommonsWare. Он создаст блокировщик, когда тот же модальный режим используется для анализа данных с сервера и сохранения в базе данных.

Предположим, у вас есть модальный класс MyModal.java, как показано ниже.

public static class MyModal {

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

Если вы хотите НЕ СОХРАНЯТЬ логическое поле в базе данных, и если вы изменили это поле как

  1. transient: это поле будет игнорироваться при сохранении в базу данных, НО оно также будет игнорировать это поле при анализе данных, поступающих с сервера.
  2. @Ignore: это поле будет игнорироваться только при вставке данных в базу данных, но это поле будет участвовать в анализе json.
person Pankaj Kumar    schedule 26.04.2018
comment
И как мне: игнорировать это поле при разборе json, но включить его в базу данных? - person Ali Kazi; 30.11.2018
comment
Нашел ответ на свой комментарий: @ColumnInfo(name = "show_id") public transient String showId; - person Ali Kazi; 30.11.2018
comment
В большинстве случаев нам нужна обратная сторона этого. - person Brill Pappin; 12.02.2021