休眠:hbm2ddl 反转列顺序 [重复]

Posted

技术标签:

【中文标题】休眠:hbm2ddl 反转列顺序 [重复]【英文标题】:Hibernate: Reversed column order by hbm2ddl [duplicate] 【发布时间】:2012-09-08 04:16:38 【问题描述】:

我让 hbm2ddl 为我创建表(用于开发目的),并且列与类中的字段顺序相反。

如何让它以与类相同的顺序创建列?

我认为 Java 类不存储字段的顺序,所以 Hibernate 根本不知道源代码中的顺序是什么(如果我考虑更复杂的情况,这似乎是合乎逻辑的)。

但是,我至少可以要求 Hibernate 将 PK 和 FK 列作为第一列吗?

休眠 4.0.0 (JBoss AS 7.1.2) mysql 5.1.x

【问题讨论】:

我也有这个问题。我只是导出数据库模式,手动更改列顺序并将其导入回来。但如果有解决方案,我会非常有兴趣了解它。 我创建了HHH-7612 来解决第二个问题。 @bphilipnyc 还有:***.com/questions/1298322 【参考方案1】:

Hibernate 团队说它是known limitation,并且无法设置顺序。但是在生产中使用 Hibernate 时不应该依赖 hbm2ddl,这是非常有限的,例如它可以添加列,但不能删除它。相反,人们通常使用LiquiBase 或FlyWay 或DbDeploy 等工具创建数据库迁移,这为您提供了更大的灵活性和对模式更新的控制。

描述这种方法如何提供帮助:假设您有一个 UAT 环境并且您刚刚更新了架构 - 您想向现有列添加非空约束。使用 hbm2ddl 这是不可能的,您将强制您的 QA 从头开始​​重新创建数据库。使用上述工具,您需要添加一个 SQL 文件,这些工具将运行这个新脚本,分别更新架构。您可能还需要设置 hbm2ddl=verify 以确保当前数据库架构是最新的,反之亦然 - 休眠映射是正确的。

【讨论】:

以上是关于休眠:hbm2ddl 反转列顺序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

dbunit 中的休眠 hbm2ddl 布尔列 typeCastException

休眠 - hibernate.hbm2ddl.auto = 验证

休眠:hbm2ddl.auto=生产中的更新?

休眠:hbm2ddl.auto=update 和 autoincrement

序列问题为啥两个实体在使用 hbm2ddl 生成模式时共享相同的序列?

hibernate.hbm2ddl.auto Hibernate 如何决定何时创建或更新 ddl?