多租户问题

fzsnzjdm  于 2021-06-24  发布在  Mysql
关注(0)|答案(0)|浏览(297)

我试图解决一个与正在开发的springwebmvc应用程序的多租户相关的问题。
需要为每个注册的客户动态创建一个模式。一旦他们登录,他们所做的所有事务都应该针对该模式。
为此,我尝试利用Hibernate5多租户。它工作得很好-直到为每个客户生成模式。应用程序从公共模式定义开始,在那里为公共模式创建所有实体表,如中所述 @Table 然后在填充表(使用该模式的实体定义)之前,尝试将数据插入到 schema.table 并抛出 schema.table 不可用。
我正在使用扩展的类 AbstractDataSourceBasedMultiTenantConnectionProviderImpl 提供 Environment.MULTI_TENANT_CONNECTION_PROVIDER 通过对象引用 @Autowired 注射。这个 CurrentTenantIdentifierResolver 接口是由一个类实现的,该类向 Environment.MULTI_TENANT_IDENTIFIER_RESOLVER 通过 @Autowired 注射。
不知道为什么hibernate/jpa提供程序不能为正在动态创建的模式填充表。JPA属性如下:

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 具有以下值:

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

pom具有以下库:
属性:

<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>

和依赖关系:

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>${project.mysql.connector.version}</version>
</dependency>
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-entitymanager</artifactId>
   <version>${project.hibernate.version}</version>
</dependency>
<dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-jpa</artifactId>
   <version>${project.spring.data.jpa.version}</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-orm</artifactId>
   <version>${project.spring.orm.version}</version>
</dependency>

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题