2012-09-15 79 views
4

我讓hbm2ddl爲我創建表(用於開發目的),並且列的順序與該類中的字段順序相反。休眠:hbm2ddl反轉列順序

如何讓它按照與班級相同的順序創建列?

我覺得Java類不存儲字段的順序,所以Hibernate根本不知道源文件中的順序是什麼(如果我考慮更復雜的情況,這似乎是合乎邏輯的)。

但是,我至少可以讓Hibernate把PK和FK列作爲第一個嗎?

的Hibernate 4.0.0(JBoss AS中7.1.2) 的MySQL 5.1.x中

+0

我也有這個問題。我只是導出數據庫模式,手動更改列順序並將其導回。但如果有解決方案,我會非常有興趣瞭解它。 –

+0

我已經創建了[HHH-7612](https://hibernate.onjira.com/browse/HHH-7612)來解決第二個問題。 –

+0

舊線程和良好的答案接受,但似乎像一個愚蠢的http://stackoverflow.com/questions/5964714​​/maintain-the-order-of-column-when-creating-a-new-table-using-hibernate – bphilipnyc

回答

6

Hibernate項目組成員說,這是一個known limitation,它是不可能的,設置的順序。但是在生產環境中使用Hibernate時,不應該依賴hbm2ddl,這是非常有限的,例如它可以添加列,但不能刪除它。相反,人們通常使用諸如LiquiBaseFlyWayDbDeploy之類的工具創建數據庫遷移,這可爲您提供更多的靈活性並控制模式更新。

要描述這種方法如何提供幫助:比方說,您有一個UAT環境,並且您剛剛更新了架構 - 您希望將非空約束添加到現有列。使用hbm2ddl這是不可能的,你會迫使你的QA從頭開始重新創建數據庫。使用上述工具,您需要添加一個SQL文件,這些工具將運行這個分別更新模式的新腳本。你也可以設置hbm2ddl = verify,以確保當前的數據庫模式是最新的,反之亦然--Hibernate映射是正確的。