deleteAll不使用外键到同一个表中的其他行

时间:2017-04-26 04:40:10

标签: activejdbc javalite

我有一个Model类,它有一个引用同一Model类的另一个实例的属性。它基本上是一个模型中的树形结构。

当我尝试执行MyModel.deleteAll()时,它会失败,因为外键约束失败。

是否有某种方法可以轻松地为deleteAll查询暂停此约束?

由于我使用的是mysql,我发现的唯一解决方法是发出一个TRUNCATE语句,mysql会立即接受。

提前致谢, 埃文

异常详情:

org.javalite.activejdbc.DBException:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(visibledb_testingaccountabilities,CONSTRAINT accountabilities_prototype_id FOREIGN KEY(prototype_id)参考accountabilitiesid)),查询:DELETE FROM accountabilities

1 个答案:

答案 0 :(得分:0)

Model#deleteAll()只生成SQL DELETE FROM YOURTABLE。 如果您可以在MySQL控制台上运行它,它将在模型中运行。如果您遇到约束违规,也许您想要:

Base.exec("TRUNCATE " + MyModel.getTableName());

或者,您可以尝试http://javalite.io/delete_cascade#method-deletecascade。小心 - 这是一种强大但危险的方法,只有在阅读完所有文档后才能使用。