我需要让Hibernate从实体开始自动生成数据库,但是我希望它们全部大写。
过去,这种做法过去一直有效,现在我用大写和小写字母弄乱了列名。
我启用了
.setProperty("hibernate.hbm2ddl.auto", "create")
为了让Hibernate自动生成数据库,我创建了一个UpperorgNamingStrategy.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()来指定其他策略:
SessionFactory sf = new Configuration() .setNamingStrategy(ImprovedNamingStrategy.INSTANCE) .addFile("Item.hbm.xml") .addFile("Bid.hbm.xml") .buildSessionFactory();
org.hibernate.cfg.ImprovedNamingStrategy是一个内置策略,对于某些应用程序可能是一个有用的起点。
但是在Hibernate 5.0.6中似乎不再有Configuration.setNamingStrategy()了。
我当然想以编程方式进行此操作(我没有.xml配置文件,也不需要它们)。
注意:
使用
.setProperty(“ hibernate.ejb.naming_strategy”,“ my.project.hibernate.UppercaseNamingStrategy”)
效果不佳,似乎被完全忽略了…
Hibernate 5使用两个新的接口来命名策略PhysicalNamingStrategy和ImplicitNamingStrategy。您只需要实现即可PhysicalNamingStrategy。在为模型创建所有列名称之后,Hibernate会调用它。因此,您可以将其设为大写。Hibernate默认使用PhysicalNamingStrategyStandardImpl,不执行任何操作。你可以扩展它
PhysicalNamingStrategy
ImplicitNamingStrategy
PhysicalNamingStrategyStandardImpl
public class UpperCaseNamingStrategy extends PhysicalNamingStrategyStandardImpl { @Override public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) { return context.getIdentifierHelper().toIdentifier( StringUtils.upperCase(name.getText(), Locale.ENGLISH)); } }
您可以UpperCaseNamingStrategy通过这种方式建立会话工厂
UpperCaseNamingStrategy
Configuration configuration = new Configuration(); configuration.setPhysicalNamingStrategy(new UpperCaseNamingStrategy()); SessionFactory sessionFactory = configuration.configure().buildSessionFactory();
我现在正在制定一个更复杂的名称策略。如果您有兴趣,可以参考Hibernate5NamingStrategy。