Hibernate的PhysicalNamingStrategy的toPhysicalSchemaName不会被调用
问题描述:
我正在使用Hibernate并尝试将实体的表和列名称外部化为.properties文件。我实现了PhysicalNamingStrategy
来映射实体属性,并在执行时一切正常(即分别调用表名和每个映射属性的方法toPhysicalTableName
和toPhysicalColumnName
)。 但是toPhysicalSchemaName
不会被调用,即使我提供了注释@Table(schema="SCHEMA_NAME")
。该文档说Hibernate的PhysicalNamingStrategy的toPhysicalSchemaName不会被调用
将应用
PhysicalNamingStrategy
不管属性是明确指定列名还是隐式确定。ImplicitNamingStrategy
只适用于没有给出明确名称的情况。
我不知道这是否也适用于架构名称。无论我做什么,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())
);
的名称构造预计,第二个参数是架构名称,但目录被再次通过。相反,它应该已经
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。