Hibernate没有使用自定义的PhysicalNamingStrategy实现

后端开发 2026-07-09

在我的单元测试中,我想使用我自定义实现的 PhysicalNamingStrategy

public class CustomPhysicalNamingStrategyStandardImpl implements PhysicalNamingStrategy {

    @Override
    public Identifier toPhysicalCatalogName(Identifier identifier, JdbcEnvironment jdbcEnvironment) {

        return null;   

    ...

}

这是我的配置:

<jdbc:embedded-database id="dataSource" type="H2"/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
            <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
            <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.internal.NoCachingRegionFactory</prop>
            <prop key="hibernate.cache.use_query_cache">false</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.physical_naming_strategy">com.mydomain.CustomPhysicalNamingStrategyStandardImpl</prop>
        </props>
    </property>
</bean>

尽管上面的配置,Hibernate仍然在使用 标准 实现的 PhysicalNamingStrategyorg.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl,也就是说)。

我已经尝试了键值 hibernate.naming.physical_strategy,但它不起作用。

我也验证了其他属性确实生效,例如通过改变 hibernate.show_sql 的值来验证。

我这里到底少了什么,应该怎么修复?

我使用的是Spring Framework 6.0.13和 Hibernate 6.2.13。

解决方案

尝试在LocalSessionFactoryBean上设置 "physicalNamingStrategy" 属性

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>

    <property name="physicalNamingStrategy">
        <bean class="com.mydomain.CustomPhysicalNamingStrategyStandardImpl"/>
    </property>

    <property name="hibernateProperties">...</property>
</bean>
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章