【发布时间】:2015-03-16 23:08:33
【问题描述】:
使用 Grails 2.4.4,并从 2.2.0 移植了我的域类。
使用 MySQL 作为数据源,我面临一个问题,即 DataSource 的“create-drop”配置。
每当我发出grails stop-app 命令时,在总共 35 个表中,架构中剩下 22 个表。
为 Hibernate 类启用调试模式后,在停止应用程序进程结束时,它为所有 35 个表生成drop table if exists <tablename>,但无论删除表是否成功,日志中都没有错误/确认.
剩下的表格有 FK 关联,需要按特定顺序删除。使用相同的 Domain 类结构,我在早期 (2.2.0) 版本的 grails 中从未遇到过这个问题。
现在我每次都在运行应用程序之前手动删除创建,因为它会导致 BootStrap 数据出现问题。
任何调试此问题的指针或可能发生这种情况的用例,都将不胜感激。
【问题讨论】:
-
您应该有 DDL 语句在删除表之前删除外键,例如
alter table tablename drop foreign key FK_hrogx8ddq6cptuh5ru8uycn6s。运行grails schema-export并查看target/ddl.sql以查看Hibernate 生成的SQL。 -
感谢@BurtBeckwith。我运行
grails schema-export并生成了文件,开始的 35 行是drop table if exists <tablename>。文件中没有alter table tablename drop foreign key <FK>。 -
文件的结构如下:首先是
drop table if exists <tablename>,然后是create table <tablename>,然后是alter table add UK constraints& 创建索引,最后是alter table add FK constrains -
对不起,我非常抱歉,我最好暂时停止深夜工作。几天前我把这个文件
ImprovedMySQLDialect删除了this。所以我在不知不觉中阻止了FK的下降。所以为了摆脱这个其他问题,我需要实施一个更好的解决方案。应考虑覆盖 dropConstraints() 方法。感谢@BurtBeckwith 为我指明了正确的方向。
标签: mysql grails grails-2.0 hibernate-4.x