これら2つは、Roomデータベースエンティティのコンテキストで交換可能ですか、そうでない場合、それらの違いは何ですか?
@Ignore
はRoom固有のアノテーションであり、Roomはそのフィールドまたはメソッドを無視する必要があることを示しています。
transient
はJava構文であり、次のことを示します このフィールドは標準でシリアル化しないでくださいJavaシリアル化 。- Roomhappensこれをデフォルトで@Ignore
と同様に扱う 。ほとんどの場合、これは継承している場合に存在しますたまたまtransient
を使用するクラスから、そのクラスを制御していません(たとえば、ライブラリからのもの)。
独自のコードでJavaシリアライゼーションを使用していない場合、フィールドには@Ignore
を使用することをお勧めします。transient
はメソッドで使用できるキーワードではありません。したがって、Roomに特定のコンストラクタを無視するように指示するには、@Ignore
を使用するしかありません。
CommonsWareの回答に追加
CommonsWareが答えたように、transient
はRoomのフィールドを無視するのに適したオプションではありません。同じモーダルを使用してサーバーからのデータを解析し、データベースに格納すると、ブロッカーが作成されます。
以下のようなモーダルクラスMyModal.Java
があるとしましょう
public static class MyModal {
@SerializedName(“intField”)
public int intField;
@SerializedName(“strField”)
public String strField;
@SerializedName(“booleanField”)
public boolean booleanField;
}
BooleanFieldをデータベースに保存しない場合、およびそのフィールドを次のように変更した場合
transient
:データベースに保存している間はこのフィールドを無視しますが、サーバーからのデータを解析している間もこのフィールドを無視します。@Ignore
:データベースにデータを挿入している間、このフィールドは無視されますが、このフィールドはJSON解析に参加します。