一尘不染

Hibernate:列顺序由hbm2ddl颠倒

hibernate

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

如何使其以与类相同的顺序创建列?

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

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

Hibernate 4.0.0(JBoss AS 7.1.2)MySQL 5.1.x


阅读 224

收藏
2020-06-20

共1个答案

一尘不染

Hibernate小组说这是一个已知的限制,无法设置顺序。但是在生产中使用Hibernate时,您不应该依赖hbm2ddl,这是相当有限的事情,例如它可以添加列,但不能删除它。取而代之的是,人们通常使用LiquiBaseFlyWayDbDeploy之类的工具来创建数据库迁移,这为您提供了更大的灵活性并可以控制架构更新。

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

2020-06-20