Grails 2.4.4 DataSource "create-drop" 无法删除所有具有 FK 的表
Grails 2.4.4 DataSource "create-drop" fails to drop all tables having FKs
使用 Grails 2.4.4,并从 2.2.0 移植了我的域 classes。
我在 w.r.t "create-drop" 配置数据源时遇到问题,使用 MySQL 作为数据源。
每当我发出 grails stop-app
命令时,在总共 35 个 table 中,架构中剩下 22 个 table。
为 Hibernate classes 启用调试模式后,在停止应用进程结束时,它为所有 35 个 tables 生成 drop table if exists <tablename>
,但没有 error/confirmation 日志中是否存在删除 table 是否成功。
剩下的 table 有 FK 关联,需要按特定顺序删除它们。使用相同的域 class 结构,我在使用早期 (2.2.0) 版本的 grails 时从未遇到过这个问题。
现在,我每次都在 运行-app 之前手动删除创建,因为它会导致 BootStrap 数据出现问题。
任何调试此问题的指针或何时会发生这种情况的用例,都将不胜感激。
对于我的案例,将 MySQL (v5.5.25) 的 FK-checks 设置为 0 解决了这个问题,尽管我不完全确定我是否应该 SET FOREIGN_KEY_CHECKS=0
。
如果有人有更好的解决方案,请分享。
编辑
由于 this 而遇到问题。经验教训 - 你不能盲目地复制粘贴随机代码 ~:-/
回答
谢谢伯特。
如果 DB 表现不稳定 w.r.t ddl 操作。始终检查 grails schema-report
生成的 ddl.sql
,理想情况下应具有以下结构
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>
....
使用 Grails 2.4.4,并从 2.2.0 移植了我的域 classes。
我在 w.r.t "create-drop" 配置数据源时遇到问题,使用 MySQL 作为数据源。
每当我发出 grails stop-app
命令时,在总共 35 个 table 中,架构中剩下 22 个 table。
为 Hibernate classes 启用调试模式后,在停止应用进程结束时,它为所有 35 个 tables 生成 drop table if exists <tablename>
,但没有 error/confirmation 日志中是否存在删除 table 是否成功。
剩下的 table 有 FK 关联,需要按特定顺序删除它们。使用相同的域 class 结构,我在使用早期 (2.2.0) 版本的 grails 时从未遇到过这个问题。
现在,我每次都在 运行-app 之前手动删除创建,因为它会导致 BootStrap 数据出现问题。
任何调试此问题的指针或何时会发生这种情况的用例,都将不胜感激。
对于我的案例,将 MySQL (v5.5.25) 的 FK-checks 设置为 0 解决了这个问题,尽管我不完全确定我是否应该 SET FOREIGN_KEY_CHECKS=0
。
如果有人有更好的解决方案,请分享。
编辑
由于 this 而遇到问题。经验教训 - 你不能盲目地复制粘贴随机代码 ~:-/
回答
谢谢伯特。
如果 DB 表现不稳定 w.r.t ddl 操作。始终检查 grails schema-report
生成的 ddl.sql
,理想情况下应具有以下结构
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>
....