gpt4 book ai didi

java - 在 Hibernate 5 中实现 NamingStrategy(使自动生成的列名称大写)

转载 作者:行者123 更新时间:2023-11-30 03:05:20 26 4
gpt4 key购买 nike

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

现在我应该

You can specify a different strategy by calling Configuration.setNamingStrategy() before adding mappings:

SessionFactory sf = new Configuration()
.setNamingStrategy(ImprovedNamingStrategy.INSTANCE)
.addFile("Item.hbm.xml")
.addFile("Bid.hbm.xml")
.buildSessionFactory();

org.hibernate.cfg.ImprovedNamingStrategy is a built-in strategy that might be a useful starting point for some applications.

Configuration.setNamingStrategy() 在 Hibernate 5.0.6 中似乎不再存在。

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

注意:

使用

.setProperty("hibernate.ejb.naming_strategy", "my.project.hibernate.UppercaseNamingStrategy")

效果不太好,似乎完全被忽略了......

最佳答案

Hibernate 5 对名称策略使用两个新接口(interface) 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构建 session 工厂

    Configuration configuration = new Configuration();
configuration.setPhysicalNamingStrategy(new UpperCaseNamingStrategy());
SessionFactory sessionFactory = configuration.configure().buildSessionFactory();

我现在正在制定更复杂的名称策略。您可以引用Hibernate5NamingStrategy如果你感兴趣。

关于java - 在 Hibernate 5 中实现 NamingStrategy(使自动生成的列名称大写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34949839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com