在Hibernate 5中实现NamingStrategy(使自动生成的列名称为UPPERCASE)

我需要让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是一个内置策略,可能是某些应用程序的有用起点。

然而,在Hibernate 5.0.6中似乎没有更多的Configuration.setNamingStrategy()。

我当然喜欢以编程方式(我没有.xml配置文件而不想要它们)。

注意:

运用

.setProperty(“hibernate.ejb.naming_strategy”,“my.project.hibernate.UppercaseNamingStrategy”)

不起作用,似乎完全被忽略了……

Hibernate 5使用两个新接口来实现名称策略PhysicalNamingStrategyImplicitNamingStrategy 。 您只需要实现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 。