当前位置: 首页 > 知识库问答 >
问题:

在Hibernate 5中实现命名策略(使自动生成的列名大写)

秦奇
2023-03-14

我启用了

.setProperty("hibernate.hbm2ddl.auto", "create") 

为了让Hibernate自动生成数据库,我创建了一个UpperCaseNamingStrategy.java扩展org.Hibernate.cfg.PromedNamingStrategy。

根据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();

RemodNamingStrategy是一种内置策略,对于某些应用程序来说,它可能是一个有用的起点。

然而,configuration.setNamingStrategy()似乎在Hibernate5.0.6中不再存在。

不起作用,似乎完全被忽视了...

共有1个答案

邢星波
2023-03-14

Hibernate5使用了两个新接口,用于名称策略PhysicalNamingStrategyimplicitNamingStrategy。您只需实现PhysicalNamingStrategy。它由Hibernate在为Model创建所有列名后调用。所以你可以把它大写。Hibernate默认情况下使用PhysicalNamingStrategy标准化MPL,它们什么都不做。你可以扩展它

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从实体开始自动生成数据库,但是我希望它们全部大写。 过去,这种做法过去一直有效,现在我用大写和小写字母弄乱了列名。 我启用了 为了让Hibernate自动生成数据库,我创建了一个UpperorgNamingStrategy.java扩展了 org.hibernate.cfg.ImprovedNamingStrategy 。 根据https://docs.jbo

  • 问题内容: 我需要让Hibernate从实体开始自动生成数据库,但是我希望它们全部大写。 过去,这种做法过去一直有效,现在我用大写和小写字母弄乱了列名。 我启用了 为了让Hibernate自动生成数据库,我创建了一个UpperorgNamingStrategy.java扩展了 org.hibernate.cfg.ImprovedNamingStrategy 。 根据https://docs.jbo

  • 我尝试设置我的JPA映射。由于某些原因,我必须有相同的java变量/表列名(包括大写字母),但我不能设置Hibernate。我尝试了明确的列名: 对于隐式映射: 这两种方法都创建不带大写字母的列名——“nextinvoicenr”。 我还试图改变Hibernate配置添加: 但没有成功

  • 问题内容: 我对hibernate(5.1版)的命名策略有些困惑-即它更改了我的表名,我想避免这种情况。另外- 根据intelij似乎已弃用,但我找不到正确配置它的(另一种)方法。 我在application.properties中具有以下配置: 如前所述,第一个被标记为已练习。 现在我有一个实体: 表格名称是类似usaUploadTable 中的名称。 现在,当我运行我的应用程序时,我得到 表’

  • 我对hibernates(5.1版)的命名策略有点困惑——也就是说,它改变了我的表名,我希望避免这种情况。还有-

  • 我知道我可以用注释命名所有表,并为所有列提供名称,但这不是我想要的解决方案。 不幸的是,我没有找到任何匹配我的案例的策略(我知道这展示了如何创建自定义命名策略,但我不认为我的案例是不常见的),我应该为我的MariaDB配置使用什么命名策略来匹配我的案例?