具有唯一on replace约束的Android房间表
我正在将我的应用程序迁移到使用Room的过程中,需要一些帮助来了解如何正确注释我的一个表 现有SQL脚本如下所示:具有唯一on replace约束的Android房间表,android,android-room,android-architecture-components,Android,Android Room,Android Architecture Components,我正在将我的应用程序迁移到使用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 )
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/数据库,因此新的包装器API在查询时包含冲突策略。这是否替换了表上的约束?我的DAO现在是否需要处理每个查询上的冲突?或者在我丢失的实体中是否有替换的字段要注释?用OnConflictStrategy注释您的所有DAO方法,实体不提供这样的机会。用OnConflictStrategy注释您的所有DAO方法,实体不提供这样的机会。好吧。所以我假设在迁移到房间的过程中,当试图保留现有数据时,差异不会引起问题?这将归结为表名、列和索引/键匹配?我不会将现有数据迁移到文件室,因此我不知道:(好的,很公平。所以我假设在迁移到文件室的过程中,当试图保留现有数据时,差异不会引起问题?这将归结为表名、列和索引/键匹配问题?我不会将现有数据迁移到文件室,所以我不知道:(