无法阻止删除一行

时间:2015-06-05 13:05:47

标签: mysql scala playframework-2.3

我正在尝试阻止删除我的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(实验室)时测试我的控制器,但对我来说似乎不是更好的方法。

由于

0 个答案:

没有答案