作者:mobiledu2502863997 | 来源:互联网 | 2022-12-26 17:27
我在房间里有一个实体
@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语法如下
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架构,我需要在实体类中添加什么更改或注释
unique (labelId, taskId)
最后,我想使用房间库在table(或房间的实体)中将labelId和taskId组合成唯一.
1> 小智..:
除了通过索引之外,不支持列上的普通UNIQUE约束.
您可以通过将@Index注释的unique属性设置为true来强制实施此唯一性属性.以下代码示例可防止表包含两行,这些行包含firstName和lastName列的相同值集:
@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;
}
在您的代码中,您可以执行以下更改以获得UNIQUE约束
@Entity(indices = arrayOf(Index(value = ["first_name", "last_name"], unique = true)))
将单个属性设置为UNIQUE怎么样?
2> 小智..:
如果您想使单个列具有唯一性,只需编写
@Entity(indices = {@Index(value = "name", unique = true)})