一尘不染

在Hibernate 5中实现NamingStrategy(将自动生成的列名设置为大写)

hibernate

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

但是在Hibernate 5.0.6中似乎不再有Configuration.setNamingStrategy()了。

我当然想以编程方式进行此操作(我没有.xml配置文件,也不需要它们)。

注意:

使用

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

效果不佳,似乎被完全忽略了…


阅读 701

收藏
2020-06-20

共1个答案

一尘不染

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

2020-06-20