gpt4 book ai didi

java - Hibernate 的 PhysicalNamingStrategy 的 toPhysicalSchemaName 不会被调用

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:53 24 4
gpt4 key购买 nike

我正在使用 Hibernate 并尝试将实体的表和列名称外部化到 .properties 文件。我已经实现了PhysicalNamingStrategy来映射实体属性,并且在执行时一切正常(即,分别为表名称和每个映射属性调用方法toPhysicalTableNametoPhysicalColumnName)。但是,即使我提供注释 @Table(schema="SCHEMA_NAME"),也不会调用 toPhysicalSchemaName。文档说的是

The PhysicalNamingStrategy will be applied regardless of whether the attribute explicitly specified the column name or whether we determined that implicitly. The ImplicitNamingStrategy would only be applied if an explicit name was not given.

我不知道这是否也适用于架构名称。无论我做什么,toPhysicalSchemaName都不会被调用。我应该以不同的方式配置架构名称才能使其正常工作吗?

感谢您的帮助!

最佳答案

经过一些调试发现 hibernate-core 5.2.2.Final 错误地创建了命名空间。 org.hibernate.boot.model.relational.Namespace.java 构造函数具有以下行

this.physicalName = new Namespace.Name(
database.getPhysicalNamingStrategy()
.toPhysicalCatalogName(name.getCatalog(), database.getJdbcEnvironment()),
database.getPhysicalNamingStrategy()
.toPhysicalCatalogName(name.getSchema(), database.getJdbcEnvironment())
);

Name 构造函数期望第二个参数是架构名称,但目录再次被传递。相反,它应该是

this.physicalName = new Namespace.Name(
database.getPhysicalNamingStrategy()
.toPhysicalCatalogName(name.getCatalog(), database.getJdbcEnvironment()),
database.getPhysicalNamingStrategy()
.toPhysicalSchemaName(name.getSchema(), database.getJdbcEnvironment())
);

此问题已在 hibernate-core-5.2.10.Final 中修复。

关于java - Hibernate 的 PhysicalNamingStrategy 的 toPhysicalSchemaName 不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45697405/

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