2010-02-18 132 views
8

我有一個JPA/Hibernate數據模型,我使用Hibernate hbm2ddl工具來生成數據庫DDL。我有一些應該是CHAR的字符串,有些可能是數據庫中的VARCHAR。我想盡量減少手動編輯DDL(我意識到有些必須發生)。JPA/Hibernate DDL的生成; CHAR與VARCHAR

任何人都知道我應該怎麼做呢?我意識到我可以通過黑客方言製作所有的Strings VARCHARS或CHARS,但這在數據庫中並不總是合適的。

我希望能夠做到這一點與註釋或aop,避免在我的班級自定義列定義文本。

謝謝。

回答

4

所以,我終於發現,你可以指定一種方言的長度限制。所以,我決定,長度爲10下,什麼應該是char和任何超過這應該是VARCHAR:

registerColumnType(Types.VARCHAR, 10, "char($l)"); 

也就是說我是想不完全是,但是這是不夠好。很傷心,我以前沒有找到。

11

@Column(columnDefinition="CHAR(<your-char-length>)")註釋要映射到數據庫中CHAR的字符串。

+1

感謝您的回答,但在最後一段中,我提到了這一點。我試圖避免使用columnDefinition。我只是希望有一個更好的方法,因爲這似乎是一個合理的要求。 – 2010-02-18 19:26:55

+0

添加註釋與添加註釋屬性之間沒有太大區別。 – mtpettyp 2010-02-18 21:23:02

+1

啊,但不同的是屬性的內容。這是將文本直接放入模式ddl中,因此,固有地與數據庫相關。另外,我必須複製文本中列的長度。這個特殊的例子並不是那麼糟糕,但是如果可以的話,值得避免。我不得不承認,但這並不看好。 – 2010-02-19 14:34:32