当前位置: 首页 > 面试题库 >

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

督宏旷
2023-03-14
问题内容

我需要让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”)

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


问题答案:

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

  • 我启用了 为了让Hibernate自动生成数据库,我创建了一个UpperCaseNamingStrategy.java扩展org.Hibernate.cfg.PromedNamingStrategy。 根据https://docs.jboss.org/hibernate/orm/5.0/manual/en-us/html_single/#configuration-namingstrategy 在

  • org.hibernate.cfg.NamingStrategy 接口允许你为数据库中的对象和 schema 元素指定一个“命名标准”。 你可能会提供一些通过 Java 标识生成数据库标识或将映射定义文件中"逻辑"表/列名处理成"物理"表/列名的规则。这个特性有助于减少冗长的映射定义文件,消除重复内容(如 TBL_ 前缀)。Hibernate 使用的缺省策略是相当精简的。 在加入映射定义前,你可以

  • 我正在尝试使用@ManyToOne和@OneToMany映射实体表。映射列位于名为“internal_plan_id”的子表中。根据要求,我不能更改名称。下面是两个实体表:父表 儿童桌: 我得到错误为:错误:关系“financial_plan_subplan”的列“internal_plan_id_internal_plan_id”不存在。 financial_subplan中用于映射的现有列名是

  • 我有一个WPF Datagrid绑定到一个DataSet;列是自动生成的。我需要将数字列向右对齐。我可以使用一个转换器,就像我在网上找到的这个例子: 但是在我的例子中,列是自动生成的,所以我不能使用 我不知道该怎么处理财产 任何解决方案?

  • 本文向大家介绍iOS自动生成表格效果的实现代码,包括了iOS自动生成表格效果的实现代码的使用技巧和注意事项,需要的朋友参考一下 一、效果图 二、工程图 三、代码。 RootViewController.h RootViewController.m 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。