2011-04-26 76 views
8

我正在嘗試構建Play!應用程序針對現有數據庫運行,其中所有列都有下劃線來分隔單詞。這意味着我必須在每個字段上添加一個@Column註釋以指定不同的名稱。無論如何玩Play!默認使用下劃線?有什麼方法讓Play框架和JPA在列名中使用下劃線?

+0

應該插入下劃線添加hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy基於什麼? – Thomas 2011-04-26 21:33:52

+0

單詞之間用下劃線分隔,而不是駱駝式的情況 – Aaron 2011-04-26 21:46:21

回答

14

如果Play使用Hibernate,如其他答案建議,則必須使用implement a custom NamingStrategy

下面是一個示例NamingStrategy所有列名轉換從低駱駝爲小寫用下劃線,使用Guava

public class CustomNamingStrategy extends ImprovedNamingStrategy { 

    private static final long serialVersionUID = -306957679456120781L; 

    @Override 
    public String columnName(final String columnName) { 
     return CaseFormat.LOWER_CAMEL 
         .to(CaseFormat.LOWER_UNDERSCORE, columnName); 
    } 
} 

,將其配置是這樣的:

以下行添加到 應用.conf來配置 NamingStrategy

hibernate.ejb.naming_strategy=<your naming strategy classname>

參考:

+1

AFAIK ImprovedNamingStrategy就是這麼做的。轉換爲小寫字母+下劃線。所以,你只需要將它設置爲ImprovedNamingStrategy。無論如何+1是一個很好的答案;) – Bogdan 2011-04-27 11:50:49

+0

@Bogdan a)謝謝! b)是真的,沒有檢查。但坦率地說:番石榴的方式看起來比Hibernate的方式更有效,所以這可能實際上是一種改進:-) – 2011-04-27 12:25:40

+1

這很好!謝謝! – Aaron 2011-04-27 14:59:13

0

那麼,如果我正確地閱讀了文檔,則播放框架將使用Hibernate作爲JPA實現。 AFAIK,沒有辦法改變Hibernate的標準命名,所以你必須添加註釋或者在映射XML文件中提供列名。

+0

聽起來像@SeanPatrickFloyd答案正在工作(根據OP和我在SO中看到的其他問題)。你介意編輯/刪除你的答案嗎?比獲得低價並且更清楚其他讀者更好! – Stefano 2012-09-14 09:05:41

1

給出的解決方案的偉大工程,但由於ST在評論中,ImprovedNamingStrategy這樣做,所以沒有必要使用番石榴。

一種改進的命名策略,喜嵌入式下劃線混合 情況名

你可以簡單地在你的application.conf(在遊戲測試!框架1.2.5)