簡體   English   中英

H2的Hibernate多租戶問題:錯誤的架構

[英]Hibernate Multi tenancy issue with H2: wrong schema

我正在構建一個在生產中使用PostgreSQL的應用程序,以及使用最新版本的Hibernate和Java 8進行本地開發和測試的H2。

該實現適用於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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM