Android 房间:@Ignore 与 Transient

Android Room: @Ignore vs Transient

这两个在 Room 数据库实体的上下文中是否可以互换,或者,如果不能,它们之间有什么区别?

@Ignore 是特定于 Room 的注解,表示 Room 应该忽略该字段或方法。

transient 是一个 Java 构造,表示 this field should not be serialized in standard Java serialization. Room happens to treat this similarly to @Ignore by default。大多数情况下,如果您从某些 class 继承恰好使用 transient 并且您不控制 class (例如,它来自图书馆)的情况。

对于您自己的代码,如果您不使用 Java 序列化,我建议坚持对字段使用 @Ignoretransient 不是方法的可用关键字,因此要告诉 Room 忽略某些构造函数,您别无选择,只能使用 @Ignore.

添加到 CommonsWare 的回答


transient 不是像 CommonsWare 回答的那样忽略 Room 字段的好选择。当使用相同的模式解析来自服务器的数据并将其存储到数据库时,它将创建阻止程序。

假设您有如下模态 class 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解析。