Spring WebMVC 4.3.3.Release + Spring Data 1.10.3 Release + Hibernate 5.2.2 Final + MySQL 5.7 - 多租户问题

时间:2016-10-06 08:27:04

标签: mysql spring hibernate jpa multi-tenant

我正在尝试解决与正在开发的SpringWebMVC应用程序的多租户相关的问题。

需要为每个注册的客户动态创建架构。一旦他们登录,他们所做的所有交易都应该违反该架构。

为此,我尝试利用Hibernate 5 Multi-Tenancy。它工作正常 - 直到为每个客户生成模式。应用程序从公共模式定义开始,为@Table中提到的公共模式创建所有实体表,然后在填充表之前(使用该模式的实体定义)尝试将数据插入{{ 1}}并抛出schema.table不可用的错误。

我正在使用扩展schema.table的类来通过AbstractDataSourceBasedMultiTenantConnectionProviderImpl注入提供Environment.MULTI_TENANT_CONNECTION_PROVIDER到对象引用。 @Autowired接口由类实现,以提供CurrentTenantIdentifierResolverEnvironment.MULTI_TENANT_IDENTIFIER_RESOLVER注入的对象引用。

不确定为什么Hibernate / JPA提供程序无法为即时创建的架构填充表。 JPAProperties如下:

@Autowired

Properties jpaProperties = new Properties(); jpaProperties.put("javax.persistence.schema-generation.database.action", "create-drop"); jpaProperties.put("javax.persistence.create-database-schemas", true); jpaProperties.put(Environment.HBM2DDL_AUTO, "create-drop"); jpaProperties.put(Environment.DEFAULT_SCHEMA, "base_schema"); jpaProperties.put(Environment.MULTI_TENANT, "SCHEMA"); jpaProperties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, applicationCurrentTenantIdentifierResolver); jpaProperties.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, applicationMultiTenantConnectionProvider); jpaProperties.put(Environment.FORMAT_SQL, true); jpaProperties.put("spring.jpa.hibernate.naming_strategy", "org.hibernate.cfg.ImprovedNamingStrategy"); jpaProperties.put(Environment.USE_SQL_COMMENTS, true); jpaProperties.put(Environment.GENERATE_STATISTICS, true); jpaProperties.put("hbm2dll.create_namespaces", true); 具有以下值:

HibernateVendorAdapter

POM有以下库:

属性:

HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL5InnoDBDialect");
vendorAdapter.setShowSql(true);
vendorAdapter.setGenerateDdl(true);
vendorAdapter.setDatabase(Database.MYSQL);

依赖项:

<properties>
  <project.mysql.connector.version>5.1.30</project.mysql.connector.version>
  <project.hibernate.version>5.2.2.Final</project.hibernate.version>
  <project.spring.orm.version>4.3.3.RELEASE</project.spring.orm.version>
  <project.spring.data.jpa.version>1.10.3.RELEASE</project.spring.data.jpa.version>
</properties>

0 个答案:

没有答案