Hibernate:通过hbm2ddl反转列顺序

Hibernate:通过hbm2ddl反转列顺序,hibernate,hbm2ddl,Hibernate,Hbm2ddl,我让hbm2ddl为我创建表(用于开发目的),列的顺序与类中字段的顺序相反 如何让它以与类相同的顺序创建列? 我认为Java类不存储字段的顺序,所以Hibernate根本不知道源代码中的顺序是什么(如果我考虑更复杂的情况,这似乎是合乎逻辑的) 但是,我至少可以要求Hibernate将PK和FK列作为第一列吗 Hibernate 4.0.0(JBoss AS 7.1.2) MySQL 5.1.xHibernate团队表示,这是一个很好的解决方案,无法设置顺序。但在生产环境中使用Hibernate时

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

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

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

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

Hibernate 4.0.0(JBoss AS 7.1.2)
MySQL 5.1.x

Hibernate团队表示,这是一个很好的解决方案,无法设置顺序。但在生产环境中使用Hibernate时,您不应该依赖hbm2ddl,它非常有限,例如它可以添加列,但不能删除列。相反,人们通常使用诸如或之类的工具创建数据库迁移,这使您能够更灵活地控制模式更新


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

我也遇到了这个问题。我只是导出数据库模式,手动更改列顺序并将其导入回数据库。但如果有解决方案,我会非常有兴趣了解它。我创建它是为了解决第二个问题。@bphilipnyc,还有: