Hibernate Multi проблема аренды с H2: неправильная схема - PullRequest
0 голосов
/ 27 мая 2019

Я создаю приложение, использующее PostgreSQL в производственной среде и H2 для локальной разработки, и тестирую с использованием последних версий Hibernate и Java 8.

Реализация прекрасно работает для PostgreSQL, но вызывает проблемы при использовании H2.Если я вызываю одну и ту же конечную точку для создания сущности для 2 разных арендаторов, все сущности создаются в одной (первой) схеме, которая была вызвана.

getConnection () в моем MultiTenantConnectionProviderImpl:

@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()?

1 Ответ

0 голосов
/ 27 мая 2019

Похоже, что это ошибка в H2, и кеш запросов не отслеживает изменение схемы.

Отключение кэша запросов полностью решает проблему:

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

Создан отчет об ошибке: https://github.com/h2database/h2database/issues/1952

...