簡體   English   中英

房間遷移?

[英]Room Migration?

我們應該在從版本X遷移到X+1描述新表的所有字段,如文檔中所示:

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
    database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, "
            + "`name` TEXT, PRIMARY KEY(`id`))");
}
};

如果是這樣,如何使用帶有嵌套的Embedded注釋的Embedded注釋來描述class migration

public class DirectorsStaff {
private String secretKey;
@Embedded
private DirectorsAnswer directorsAnswer;

public String getSecretKey() {
    return secretKey;
}

public void setSecretKey(String secretKey) {
    this.secretKey = secretKey;
}

public DirectorsAnswer getDirectorsAnswer() {
    return directorsAnswer;
}

public void setDirectorsAnswer(DirectorsAnswer directorsAnswer) {
    this.directorsAnswer = directorsAnswer;
}
}

DirectorsStaff Embedded也被Embedded

使用@Embedded來注釋實體/pojo 的字段實際上會在表中創建這樣的子字段。

每當您執行具有此類子字段的查詢時, Room都會幫助您將它們組合成特定類型。

因此,您應該在遷移時描述新表的所有字段。


假設數據庫有一個版本 1 的Foo表,而您想為版本 2 添加一個新表Bar

@Entity
data class Foo(
  @PrimaryKey val id: Int,
  val name: String
)

@Entity
data class Bar(
  @PrimaryKey val id: Int,
  @Embedded(prefix = "foo_") val foo: Foo
)

class Migration1_2: Migration(1, 2) {
  override fun migrate(database: SupportSQLiteDatabase) {
     database.execSQL("CREATE TABLE Bar (id INTEGER PRIMARY KEY NOT NULL, foo_id INTEGER NOT NULL, foo_name TEXT NOT NULL)")
  }
}

migrate()應該運行ALTER TABLE (它的主要目的是不需要描述整個表,而只描述字段或索引,它們將被更改),有時它可能包含一個CREATE TABLE或一個DROP TABLE語句。 您注釋為@Embedded內容應該是另一個 Room 實體(這幾乎不會影響遷移,但會影響映射)。

使用ColumnInfo另一種方法,然后您可以直接引用該列

@Entity
data class Foo(
  @ColumnInfo(name = "foo_id") val id: Int,
  @ColumnInfo(name = "foo_name") val name: String
)

@Entity
data class Bar(
  @PrimaryKey val id: Int,
  @Embedded val foo: Foo
)

class Migration1_2: Migration(1, 2) {
  override fun migrate(database: SupportSQLiteDatabase) {
     database.execSQL("CREATE TABLE Bar (id INTEGER PRIMARY KEY NOT NULL, foo_id INTEGER NOT NULL, foo_name TEXT NOT NULL)")
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM