2011-03-09 80 views
6

如何強制hibernate生成數據庫模式,以便將CamelCase轉換爲Underscores(使用HBM)?例如。我有:休眠時使用下劃線生成列和表名稱

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="cz.csas.pdb.be.model.product.passive"> 

    <class name="foo.BarBaz"> 

     <id name="barBazId"> 
      <generator class="sequence"/> 
     </id> 

     <property name="extractContactType"/> 
     <!-- ... --> 
    </class> 
</hibernate-mapping> 

而且我想冬眠創建表像這樣(甲骨文):

CREATE TABLE "BAR_BAZ" 
    (
    "BAR_BAZ_ID"    NUMBER(19,0) NOT NULL ENABLE, 
    "EXTRACT_CONTACT_TYPE"  VARCHAR2(512 CHAR), 
    -- PK etc... 
) 

我知道我可以在hbm.xml文件中使用的表/列名,但我想全局設置(既節省時間又防止錯誤)。

回答

7

ImprovedNamingStrategy應該做你想要的。請參閱3.6. Implementing a NamingStrategy

+0

它看起來像它應該工作正常,但我得到一個異常 產生的原因:org.hibernate.MappingException:通過不同的物理那些引用相同的邏輯列名:account_charge.PASSIVEACCOUNT =>「passive_account」和「passiveaccount」; 對於簡單的多對一(accountCharge HBM具有「<多對一名稱=」passiveAccount「/>」)。 – 2011-03-09 10:24:02

5

JPA 2(休眠4),it is even more easier,只需添加:

<property name="hibernate.ejb.naming_strategy" 
     value="org.hibernate.cfg.ImprovedNamingStrategy" /> 

persistence.xml

+0

聽起來不錯,但我得到一個SAX-Parse-Exception,它說明屬性'value'必須被定義。可能我有一些舊的DTD或Schema for hibernate.cfg.xml。使用休眠4.3.5-Final。 – user152468 2014-07-06 18:56:04

+1

它完美的工作,允許我在數據庫的實體和snake_case上使用camelCase(postgresql),我使用4.3.8-Final – edur 2015-03-01 02:44:10