Grails 2.4.4 DataSource“create-drop”无法删除所有具有FK的表

时间:2015-01-19 00:01:16

标签: mysql grails grails-2.0 hibernate-4.x

使用Grails 2.4.4,并从2.2.0移植了我的域类。

我遇到了一个问题w.r.t" create-drop"使用MySQL作为数据源的DataSource配置。

每当我发出grails stop-app命令时,总共有35个表,架构中还剩下22个表。

为Hibernate类启用调试模式后,在stop-app进程结束时,它为所有35个表生成drop table if exists <tablename>,但是日志中没有错误/确认是否删除表成功或不。

左边的表格有FK关联,需要按特定顺序删除。使用相同的Domain类结构,我从未在早期(2.2.0)版本的grails中遇到此问题。

现在我在run-app之前每次都手动删除 - 因为它会导致BootStrap数据出现问题。

任何指向调试此问题的指针或用于何时发生这种情况的用例都应该受到赞赏。

1 个答案:

答案 0 :(得分:0)

对于我的情况设置,对于MySQL(v5.5.25),FK检查为0解决了这个问题,尽管我不完全确定我是否应该SET FOREIGN_KEY_CHECKS=0

如果有人有更好的解决方案,请分享。

修改

由于this而面临问题。获得的经验教训 - 你不能盲目地复制粘贴随机代码〜: - /

<强> ANSWER

谢谢伯特。

如果DB的行为不正常,请执行ddl操作。始终检查ddl.sql生成的grails schema-report,理想情况下应该具有以下结构

alter table <Table> drop constraint <Constraint>
...

drop table if exists <Table>
...

create table <Table>(...)
...

create index <Index> ...   --(if any)
...

alter table <Table> add constraint <Constraint>
....