我正在尝试在程序启动时更改默认数据库。首先,我从默认数据库 (main_database) 开始,在选择一些表后,我想更改为另一个表 (second_database)。
我使用此代码但不起作用:
String qlQuery = "USE second_database;";
Query query = entityManager.createNativeQuery(qlQuery);
query.getResultList();
Server server = serverService.findById(1);
但似乎getResultList仅适用于选择。
我该如何解决这个问题?
我正在使用Spring Boot和JPA。
谢谢!
溶液:
租赁(到 Spring Boot 和 JPA): https://javadeveloperzone.com/spring-boot/spring-boot-jpa-multi-tenancy-example/
我可以想到两个选项,但这完全取决于您的用例:
1. 在"default_database"中创建实时取景
您正在使用 31 个子数据库,但是否需要访问其所有数据?如果无法回答这个问题(例如,您希望将来需要从这 31 个数据库之一访问任意表),则实时视图是不行的。
如果确定应用程序所需的所有数据都是 - 来自数据库 1 - 表 A 和 B;来自 DB2 - 表 C;来自 DB3 - 表 D 和 E;依此类推 - 则创建视图可能是一个很好的方法。 您还应该考虑表数据大小和要执行的操作(例如只读或写入?
2. 为多租户配置休眠:
您可以将休眠配置为在不同的数据库中执行查询。
您需要注意以下事项:
-
多租户策略 - 对于 MySql,使用
MultiTenancyStrategy.DATABASE
-
可以通过hibernate.multi_tenant_connection_provider属性传递的
MultiTenancyConnectionProvider
实现 -
可以通过hibernate.tenant_identifier_resolver属性传递的
CurrentTenantIdentifierResolver
实现
您可以按照官方文档了解更多详细信息和代码示例,以及大师本人的这篇出色的动手文章。