gpt4 book ai didi

java - H2 的 Hibernate Multi-Tenancy 问题 : wrong schema

转载 作者:行者123 更新时间:2023-12-02 05:10:35 25 4
gpt4 key购买 nike

我正在构建一个应用程序,该应用程序在生产中使用 PostgreSQL,并使用最新版本的 Hibernate 和 Java 8 进行本地开发和测试。

该实现对于 PostgreSQL 工作正常,但在使用 H2 时会出现问题。如果我调用同一端点为 2 个不同租户创建实体,则所有实体都会在调用的同一(第一个)架构中创建。

我的 MultiTenantConnectionProviderImpl 中的 getConnection():

@Override
public Connection getConnection(String tenantIdentifier) throws SQLException {
final Connection connection = getAnyConnection();
connection.setSchema(tenantIdentifier);
return connection;
}

application.properties:

spring.datasource.url=jdbc:h2:mem:mydb;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE
spring.datasource.username=sa
spring.datasource.password=

请注意,即使将正确tenantIdentifier传递到getConnection中,查询仍然针对错误的架构运行。

这可能是 Hikari 连接池缓存连接而不传播 setSchema() 调用的问题吗?

最佳答案

看起来这是 H2 的一个错误,它的查询缓存没有检测到架构的更改。

禁用查询缓存可以完全解决该问题:

jdbc:h2:mem:mydb;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;QUERY_CACHE_SIZE=0

已创建错误报告:https://github.com/h2database/h2database/issues/1952

关于java - H2 的 Hibernate Multi-Tenancy 问题 : wrong schema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com