我正在将我的应用迁移到使用Room,需要一些帮助来确定如何正确地注释我的一个表。
现有的SQL脚本如下所示:
CREATE TABLE member_rooms (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
new_messages INTEGER DEFAULT 0,
member_id_fk TEXT,
FOREIGN KEY ( member_id_fk ) REFERENCES members ( member_id ) ON DELETE CASCADE,
UNIQUE ( member_id ) ON CONFLICT REPLACE )
我的新实体类如下:
@Entity(tableName = "member_rooms",
indices = {@Index(value = {"member_id_fk"}, unique = true)},
foreignKeys = {@ForeignKey(entity = MemberTableModel.class,
parentColumns = "member_id",
childColumns = "member_id_fk",
onDelete = CASCADE)})
public class MemberRoomTableModel {
@PrimaryKey(autoGenerate = true)
@NonNull
@ColumnInfo(name = "_id")
private int rowId;
@ColumnInfo(name = "new_messages")
private int numNewMessages;
@ColumnInfo(name = "member_id_fk")
private String memberId;
.... constructors getters etc ... }
我相信这是该表的正确表示,但是ON CONFLICT REPLACE约束是让我失望的。由于Room使用SupportSqlOpenHelper / Database,因此新的包装器API在查询时包含冲突策略。这会替换表上的约束吗?我的DAO现在需要处理每个查询的冲突吗?或者是否有一个字段来注释在实体中替换我缺少的东西?
答案 0 :(得分:1)
使用OnConflictStrategy注释所有DAO方法,实体不提供这样的机会。