Являются ли эти два взаимозаменяемыми в контексте объекта базы данных Room, или, если нет, в чем между ними разница?
Android Room: @Ignore vs Transient
Ответы (2)
@Ignore
— это аннотация для комнаты, говорящая, что комната должна игнорировать это поле или метод.
transient
— это конструкция Java, указывающая, что это поле не следует сериализовать в стандартной сериализации Java. Комната случайно обрабатывает это аналогично @Ignore
по умолчанию. В основном это происходит в случаях, когда вы наследуете от какого-то класса, который использует transient
, и вы не контролируете этот класс (например, он из библиотеки).
Для вашего собственного кода, если вы не используете сериализацию Java, я рекомендую придерживаться @Ignore
для полей. transient
не является доступным ключевым словом для метода, поэтому, чтобы указать Room игнорировать определенные конструкторы, у вас нет другого выбора, кроме как использовать @Ignore
.
Добавление к ответу CommonsWare
transient
не является хорошим вариантом для игнорирования полей для комнаты, как ответил CommonsWare. Он создаст блокировщик, когда тот же модальный режим используется для анализа данных с сервера и сохранения в базе данных.
Предположим, у вас есть модальный класс MyModal.java
, как показано ниже.
public static class MyModal {
@SerializedName(“intField”)
public int intField;
@SerializedName(“strField”)
public String strField;
@SerializedName(“booleanField”)
public boolean booleanField;
}
Если вы хотите НЕ СОХРАНЯТЬ логическое поле в базе данных, и если вы изменили это поле как
transient
: это поле будет игнорироваться при сохранении в базу данных, НО оно также будет игнорировать это поле при анализе данных, поступающих с сервера.@Ignore
: это поле будет игнорироваться только при вставке данных в базу данных, но это поле будет участвовать в анализе json.
@ColumnInfo(name = "show_id")
public transient String showId;
- person Ali Kazi; 30.11.2018