【问题标题】:Android Room: @Ignore vs TransientAndroid Room:@Ignore vs Transient
【发布时间】:2018-05-22 22:14:18
【问题描述】:

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

【问题讨论】:

标签: android serialization android-room transient


【解决方案1】:

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

transient是一个Java构造,表示this field should not be serialized in standard Java serializationRoom happens to treat this similarly to @Ignore by default。大多数情况下,您从某个恰好使用 transient 的类继承而您不控制该类(例如,它来自库)。

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

【讨论】:

    【解决方案2】:

    添加到 CommonsWare 的答案


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

    假设您有一个模态类MyModal.java,如下所示

    public static class MyModal {
    
        @SerializedName(“intField”)
        public int intField;
        @SerializedName(“strField”)
        public String strField;
        @SerializedName(“booleanField”)
        public boolean booleanField;
    }
    

    如果您不想将 booleanField 保存到数据库中,并且您将该字段修改为

    1. transient :它会在保存到数据库时忽略这个字段,但是在解析来自服务器的数据时它也会忽略这个字段。
    2. @Ignore : 向数据库插入数据时只会忽略该字段,但该字段会参与json解析。

    【讨论】:

    • 我该如何:在 json 解析时忽略该字段,但将其包含在数据库中?
    • 找到我自己评论的答案:@ColumnInfo(name = "show_id")public transient String showId;
    • 大多数时候我们需要反之。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多