我需要让Hibernate从实体开始自动生成数据库,但是我希望它们都是UPPERCASE。
过去曾经工作过,现在我用大写和小写字母混淆了列名。
我启用了
.setProperty("hibernate.hbm2ddl.auto", "create")
让Hibernate自动生成数据库,我创建了一个扩展 org.hibernate.cfg.ImprovedNamingStrategy 的UppercaseNamingStrategy.java。
根据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 :(得分:2)
Hibernate 5使用两个新接口来实现名称策略PhysicalNamingStrategy
和ImplicitNamingStrategy
。您只需实施PhysicalNamingStrategy
即可。在为模型创建所有列名后,由Hibernate调用它。所以你可以把它做成大写。 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));
}
}
您可以通过这种方式使用UpperCaseNamingStrategy
构建会话工厂
Configuration configuration = new Configuration();
configuration.setPhysicalNamingStrategy(new UpperCaseNamingStrategy());
SessionFactory sessionFactory = configuration.configure().buildSessionFactory();
我正在制定一个更复杂的名称策略。如果您有兴趣,可以参考Hibernate5NamingStrategy。