Hibernate 6中MultiTenancyStrategy是否弃用?Spring Boot3多租户配置求助
解决方案
在Spring Boot 3(对应Hibernate 6.x版本)中,MultiTenancyStrategy类已被移除,因此无法直接引用。解决这个问题的核心是直接使用字符串常量指定多租户策略,替代原来的枚举类。
修改后的代码
Map<String, Object> properties = new HashMap<>(this.jpaProperties.getProperties()); properties.put(AvailableSettings.PHYSICAL_NAMING_STRATEGY, "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy"); properties.put(AvailableSettings.IMPLICIT_NAMING_STRATEGY, "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy"); properties.put(AvailableSettings.BEAN_CONTAINER, new SpringBeanContainer(this.beanFactory)); properties.remove(AvailableSettings.DEFAULT_SCHEMA); // 替换原来的MultiTenancyStrategy.SCHEMA为字符串常量"SCHEMA" properties.put(AvailableSettings.MULTI_TENANT, "SCHEMA"); properties.put(AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER, connectionProvider); properties.put(AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER, tenantResolver); emfBean.setJpaPropertyMap(properties);
额外注意事项
- 确保
connectionProvider实现的是Hibernate 6.x版本的org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider接口,Hibernate 6对该接口的方法签名有调整。 - 租户解析器
tenantResolver需实现org.hibernate.context.spi.TenantIdentifierResolver接口,保持与Hibernate 6的兼容性。 - 确认项目依赖中Hibernate Core的版本与Spring Boot 3的版本匹配(Spring Boot 3默认集成Hibernate 6.x),避免版本冲突。
内容的提问来源于stack exchange,提问作者Pavithra Ranasinghe
相关产品推荐
相关产品推荐

