Hibernate MySQL 查找未映射的表和列

Posted

技术标签:

【中文标题】Hibernate MySQL 查找未映射的表和列【英文标题】:Hibernate MySQL Find Unmapped Tables and Columns 【发布时间】:2018-05-06 03:02:07 【问题描述】:

我使用 Hibernate 的自动生成 DDL 功能来创建我的表和列。

但是,我最终删除了实体中的许多列,但这些列仍保留在数据库中。

是否有一个脚本可以识别那些未映射的列和表,以便我可以手动删除它们?

现在,我手动执行此操作,但随着数据库的增长,它变得越来越有问题。

【问题讨论】:

【参考方案1】:

恐怕没有自动化的方法可以做到这一点。

或者,您可以在构建和加载项目之前删除整个表,并让 hibernate 使用您定义的列名重新创建它。

【讨论】:

不是一个选项,因为这是清理生产表。【参考方案2】:

推荐的是:

    我们应该只在开发环境中使用 hibernate.hbm2ddl.auto 属性,而不是在生产环境中使用

    如果 hibernate.hbm2ddl.auto=create-drop,hibernate 将在每次部署时删除并创建一个新数据库, 这意味着我们可以跟踪数据库状态及其一致性。

    如果 hibernate.hbm2ddl.auto=update,hibernate 将仅使用模型/实体类中所做的更改来更新数据库, 但它不应该被生产环境/数据库信任。

    应将生产环境的hibernate.hbm2ddl.auto 设置为默认值,以便在生产环境中不应从hibernate 反映数据库更改。

【讨论】:

我同意 prod 永远不应该自动生成 ddl。但现实是,我不得不清理数百个未映射的列。 我很惊讶没有人为此编写脚本。因为我还剩下数百个未使用的外键。

以上是关于Hibernate MySQL 查找未映射的表和列的主要内容,如果未能解决你的问题,请参考以下文章

Sqlite:向表和列添加 COMMENT ON 描述?

从 JSON 数据自动生成 MySQL 表和列

有没有办法列出 ORACLE 查询中使用的表和列? [复制]

如何回滚到以前的迁移并删除架构中的表和列?

使用 Hibernate 和 JSP 创建表和数据未保存

如何防止 Entity Framework Core 2.0 重命名生成类中的表和列(数据库优先)