Hibernate的PhysicalNamingStrategy的toPhysicalSchemaName不会被调用

问题描述:

我正在使用Hibernate并尝试将实体的表和列名称外部化为.properties文件。我实现了PhysicalNamingStrategy来映射实体属性,并在执行时一切正常(即分别调用表名和每个映射属性的方法toPhysicalTableNametoPhysicalColumnName)。 但是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。