我正在尝试阻止删除我的Lab表的行,当时仍有行引用它。
这是表Lab:
的脚本CREATE TABLE Lab (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
acronym VARCHAR(255) NOT NULL,
name VARCHAR(500) NOT NULL UNIQUE,
email VARCHAR(500) NOT NULL UNIQUE,
logoId VARCHAR(30) UNIQUE,
PRIMARY KEY (id)
);
以下是引用它的一个表的脚本:
CREATE TABLE AppUser (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
firstName VARCHAR(255) NOT NULL,
lastName VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
lab INT UNSIGNED NOT NULL
REFERENCES Lab(id)
ON DELETE RESTRICT,
hashedPass VARCHAR(255) NOT NULL,
role INT NOT NULL,
rememberMeToken VARCHAR(255),
PRIMARY KEY (id)
);
我不知道为什么,但似乎ON DELETE RESTRICT不会阻止我的Scala / Playframework删除我的任何实验室。
这是删除的Scala函数:
def destroy(lab: Lab):Boolean = DB.withConnection {implicit c =>
try {
SQL("DELETE FROM Lab WHERE id = {id}")
.on("id" -> lab.id)
.executeUpdate()
true
} catch {
case e: SQLException
if e.getMessage.contains("update or delete on table \"lab\" violates foreign key constraint \"conference_organizedby_fkey\" on table \"conference\"") |
e.getMessage.contains("update or delete on table \"lab\" violates foreign key constraint \"appuser_lab_fkey\" on table \"appuser\"")
=> Logger.warn(e.getMessage); false
}
}
我使用anorm作为数据访问层。
你认为我做错了,还是有任何建议让它发挥作用?
否则我可能只是在调用destroy(实验室)时测试我的控制器,但对我来说似乎不是更好的方法。
由于