【问题标题】:Implementing a NamingStrategy in Hibernate 5 (make autogenerated column names UPPERCASE)在 Hibernate 5 中实现 NamingStrategy(使自动生成的列名大写)
【发布时间】:2016-04-29 05:43:07
【问题描述】:

我需要让 Hibernate 从实体开始自动生成数据库,但是我希望它们全部大写。

这在过去可以工作,现在我用大写和小写字母弄乱了列名。

我启用了

.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")

也不好用,好像完全被忽略了……

【问题讨论】:

标签: java hibernate jpa


【解决方案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

【讨论】:

  • 谢谢,升级到 Hibernate 5 并扩展 PhysicalNamingStrategyStandardImpl 修复了它。只是快速咆哮:为什么他们必须更改方法和类的名称并保持文档不变?请继续更新代码并保持命名不变。
  • @sarah.ferguson 不客气。看起来,Hibernate 的文档总是很差。有趣的是,Hibernate 5 中有 ImprovedNamingStrategy 类,但是你不能再使用它了。
  • 嘿@v.ladyev 感谢您提供此信息。只是一个简单的问题,如果我想通过 persistence.xml 配置我的应用程序怎么办?
  • @Kikin-Sama 抱歉,我还没有研究将命名策略与 JPA 一起使用。
猜你喜欢
  • 2017-09-08
  • 2020-10-16
  • 2023-03-31
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
相关资源
最近更新 更多