我房间里有一个实体
@Entity(foreignKeys ={ @ForeignKey(entity = Label.class, parentColumns = "_id", childColumns = "labelId", onDelete = CASCADE), @ForeignKey(entity = Task.class, parentColumns = "_id", childColumns = "taskId", onDelete = CASCADE) }) public class LabelOfTask extends Data{ @ColumnInfo(name = "labelId") private Integer labelId; @ColumnInfo(name = "taskId") private Integer taskId; }该实体的sql语法如下
sql syntax of this entity is as below
CREATE TABLE `LabelOfTask` ( `_id` INTEGER PRIMARY KEY AUTOINCREMENT, `labelId` INTEGER, `taskId` INTEGER, FOREIGN KEY(`labelId`) REFERENCES `Label`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`taskId`) REFERENCES `Task`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE );但是如果我想将以下约束附加到表的自动生成的 sql 模式,我需要在实体类中添加什么更改或注释
but what change or annotation I need to add in entity class if I want to append below constraint to the auto generated sql schema of the table
unique (labelId, taskId)最终我想使用房间库使 labelId 和 taskId 的组合在表(或房间实体)中唯一.
Ultimately I want to make combination of labelId and taskId unique in a table(or entity of room) using room library.
推荐答案不支持对列的普通 UNIQUE 约束(通过索引除外).
您可以通过将 @Index 注释的唯一属性设置为 true 来强制执行此唯一性属性.以下代码示例 (Java) 可防止表中的两行包含 firstName 和 lastName 列的相同值集:
You can enforce this uniqueness property by setting the unique property of an @Index annotation to true. The following code sample (Java) prevents a table from having two rows that contain the same set of values for the firstName and lastName columns:
@Entity(indices = {@Index(value = {"first_name", "last_name"}, unique = true)}) class User { @PrimaryKey public int id; @ColumnInfo(name = "first_name") public String firstName; @ColumnInfo(name = "last_name") public String lastName; @Ignore Bitmap picture; }Kotlin 等价的注解如下:
The Kotlin equivalent of the annotation is given below:
@Entity(indices = [Index(value = ["first_name", "last_name"], unique = true)])在您的代码中,您可以进行以下更改以获得 UNIQUE 约束
In your code you can do the following changes to have UNIQUE constraints
@Entity(foreignKeys ={ @ForeignKey(entity = Label.class, parentColumns = "_id", childColumns = "labelId", onDelete = CASCADE), @ForeignKey(entity = Task.class, parentColumns = "_id", childColumns = "taskId", onDelete = CASCADE)}, indices = {@Index(value = {"labelId", "taskId"}, unique = true)} ) public class LabelOfTask extends Data{ @ColumnInfo(name = "labelId") private Integer labelId; @ColumnInfo(name = "taskId") private Integer taskId; }更多推荐
将房间数据库中的唯一约束添加到多列
发布评论