2016-01-22 37 views
1

我需要讓Hibernate從實體開始自動生成數據庫,但是我希望它們都是大寫的。在Hibernate 5中實現NamingStrategy(使自動生成的列名稱爲UPPERCASE)

這用於過去的工作,現在我已經搞砸了大小寫字母的列名稱。

我啓用了

.setProperty("hibernate.hbm2ddl.auto", "create") 

來讓Hibernate自動生成數據庫,我創建了一個UppercaseNamingStrategy.java延長org.hibernate.cfg.ImprovedNamingStrategy

根據https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html_single/#configuration-namingstrategy

現在我應該

你可以通過調用 Configuration.setNamingStrategy()加入映射之前指定了不同的策略:

SessionFactory sf = new Configuration() 
.setNamingStrategy(ImprovedNamingStrategy.INSTANCE) 
.addFile("Item.hbm.xml") 
.addFile("Bid.hbm.xml") 
.buildSessionFactory(); 

org.hibernate.cfg .ImprovedNamingStrategy是一種內置策略,對於某些應用程序來說, 可能是一個有用的起點。

Configuration.setNamingStrategy()似乎在Hibernate 5.0.6中沒有更多。

我當然想要以編程方式來做(我沒有.xml配置文件,並且不需要它們)。

注:

使用

.setProperty( 「hibernate.ejb.naming_strategy」, 「my.project.hibernate.UppercaseNamingStrategy」)

不工作爲好,似乎一起被忽略...

+0

嘗試覆蓋此https://docs.jboss.org/hibernate/orm/5.0/javadocs/org/hibernate/boot/model/naming/ImplicitNamingStrategyLegacyHbmImpl.html。 –

+0

這是另一個解決方案http://stackoverflow.com/questions/32165694/spring-hibernate-5-naming-strategy-configuration –

回答

2

休眠5使用兩個新接口的名稱策略PhysicalNamingStrategyImplicitNamingStrategy。您只需要實施PhysicalNamingStrategy。在爲模型創建所有列名後,由Hibernate調用它。所以你可以使它大寫。休眠使用默認PhysicalNamingStrategyStandardImpl,那什麼都不做。你可以擴展它

public class UpperCaseNamingStrategy extends PhysicalNamingStrategyStandardImpl { 

    @Override 
    public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) { 
     return context.getIdentifierHelper().toIdentifier(
      StringUtils.upperCase(name.getText(), Locale.ENGLISH)); 
    } 

} 

您可以通過這種方式

Configuration configuration = new Configuration(); 
    configuration.setPhysicalNamingStrategy(new UpperCaseNamingStrategy()); 
    SessionFactory sessionFactory = configuration.configure().buildSessionFactory(); 

我現在在一個更復雜的名牌戰略工作與UpperCaseNamingStrategy建立會話工廠。如果您有興趣,可以參考Hibernate5NamingStrategy

+0

Thankyou,升級到Hibernate 5並擴展PhysicalNamingStrategyStandardImpl修復它。只是一個快速的咆哮:爲什麼他們有更改方法和類的名稱並保持文檔不變?請繼續更新代碼並保持原樣。 –

+0

@ sarah.ferguson不客氣。看起來,Hibernate總是有一個糟糕的文檔。有趣的是,Hibernate 5中有'ImprovedNamingStrategy'類,但是你不能再使用它了。 –

+1

嘿@ v.ladynev感謝這些信息。只是一個簡單的問題,如果我想通過persistence.xml配置我的應用程序,該怎麼辦? –

相關問題