0
使用放入系統JPA屬性低效的Ehcache性能
props.put("hibernate.cache.use_query_cache", "true");
props.put("hibernate.cache.use_second_level_cache", "true");
props.put("hibernate.temp.use_jdbc_metadata_defaults", "false");
props.put("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory");
props.put("javax.persistence.sharedCache.mode", SharedCacheMode.ALL);
的Ehcache是沒有效率爲相同的查詢,
問題是起作用實現QueryCache類的namedParameters.hashCode()相關的,它產生一個不同的HashCode相同的查詢!
private int generateHashCode() {
int result = 13;
result = 37 * result + (firstRow==null ? 0 : firstRow.hashCode());
result = 37 * result + (maxRows==null ? 0 : maxRows.hashCode());
for (int i=0; i< positionalParameterValues.length; i++) {
result = 37 * result + (positionalParameterValues[i]==null ? 0 : positionalParameterTypes[i].getHashCode(positionalParameterValues[i]));
}
result = 37 * result + (namedParameters==null ? 0 : namedParameters.hashCode());
result = 37 * result + (filterKeys ==null ? 0 : filterKeys.hashCode());
result = 37 * result + (customTransformer==null ? 0 : customTransformer.hashCode());
result = 37 * result + (tenantIdentifier==null ? 0 : tenantIdentifier.hashCode());
result = 37 * result + sqlQueryString.hashCode();
return result;
}
這是關係到類
org.hibernate.type.AbstractType
public int getHashCode(Object x) {
return x.hashCode();
}
它產生一個不同的(新)hachCode對於相同Array對象[01,1]!
這hashCode方法應該是遞歸的陣列