5

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

我怎样才能让它以与类相同的顺序创建列?

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

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

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

4

1 回答 1

9

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

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

于 2012-09-15T13:49:49.973 回答