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 序列化,我建议坚持对字段使用 @Ignore
。 transient
不是方法的可用关键字,因此要告诉 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;
}
如果您不想将布尔字段保存到数据库中,并且您将该字段修改为
transient
: 保存到数据库时会忽略这个字段,但是在解析来自服务器的数据时也会忽略这个字段。
@Ignore
: 往数据库中插入数据时只会忽略该字段,但该字段会参与json解析。
这两个在 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 序列化,我建议坚持对字段使用 @Ignore
。 transient
不是方法的可用关键字,因此要告诉 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;
}
如果您不想将布尔字段保存到数据库中,并且您将该字段修改为
transient
: 保存到数据库时会忽略这个字段,但是在解析来自服务器的数据时也会忽略这个字段。@Ignore
: 往数据库中插入数据时只会忽略该字段,但该字段会参与json解析。