我目前正在使用带有多租户选项的Hibernate(在MySQL中为每个租户创建模式...因此每个租户都有自己的数据库)。我们实现了连接提供程序和租户标识符,可以正确地为我们切换DB模式。非常好。
现在,我们想开始探索在应用程序中使用第二级缓存。浏览文档时,不清楚它是否正常工作。
对于给定的租户数据库,将有具有给定DB ID(1,2,3等)的行作为主键。当我有两个租户DB时,这些实体是否分别存储?Hibernate是否会正确地为每个租户创建缓存(有效地)?
我目前正在使用带有多租户选项的Hibernate(在MySQL中为每个租户创建模式...因此每个租户都有自己的数据库)。我们实现了连接提供程序和租户标识符,可以正确地为我们切换DB模式。非常好。
现在,我们想开始探索在应用程序中使用第二级缓存。浏览文档时,不清楚它是否正常工作。
对于给定的租户数据库,将有具有给定DB ID(1,2,3等)的行作为主键。当我有两个租户DB时,这些实体是否分别存储?Hibernate是否会正确地为每个租户创建缓存(有效地)?
是的,它应该这样做,因为请看 QueryKey
:
public class QueryKey
implements Serializable {
private final String sqlQueryString;
private final Type[] positionalParameterTypes;
private final Object[] positionalParameterValues;
private final Map namedParameters;
private final Integer firstRow;
private final Integer maxRows;
private final String tenantIdentifier;
private final Set filterKeys;
private final CacheableResultTransformer customTransformer;
private transient int hashCode;
...
}
如您所见,每个查询缓存条目都与租户相关,因此有一个tenantIdnetifier
字段。
如果这对您不起作用,则是一个错误。