【发布时间】:2015-02-04 17:18:37
【问题描述】:
使用那些 JPA 属性
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();
}
它为同一个 Array 对象 [01, 1] 生成不同的(新的)hachCode!
这个 hashCode 方法对于数组应该是递归的
【问题讨论】: