Configurar o EhCache com Hibernate 3.3 e Spring

Galera, estou com problemas ao tentar habilitar um cache do Hibernate 3.3 com o Spring:

<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
        <property name="configLocations">
            <list>                
                <value>classpath:/hibernate.cfg.xml</value>
            </list>
        </property>
        
		<property name="hibernateProperties">
			<value>				
				hibernate.dialect=${hibernate.connection.dialeto}
				hibernate.query.substitutions=true 'Y', false 'N'
				
				hibernate.cache.use_second_level_cache=true
				hibernate.cache.use_query_cache=true
				hibernate.cache.region.factory_class=net.sf.ehcache.hibernate.EhCacheRegionFactory
				
				hibernate.connection.lc_ctype=ISO8859_1
				hibernate.show.sql = true
				hibernate.format.sql = true
				
				
			</value>
		</property>
	</bean>
	
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

Coloquei a lib ehcache-core-2.4.2 no classpath

E ao debugar o erro ocorre na linha que chama o cache:

q.setCacheable(true);

E o arquivo ecache.xml esta criado na raiz do classpath.

E ocorre o seguinte erro:

java.lang.ArrayIndexOutOfBoundsException: 0
	org.hibernate.type.TypeFactory.disassemble(TypeFactory.java:474)
	org.hibernate.cache.StandardQueryCache.put(StandardQueryCache.java:104)
	org.hibernate.loader.Loader.putResultInQueryCache(Loader.java:2208)
	org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2159)
	org.hibernate.loader.Loader.list(Loader.java:2117)
	org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312)
	org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1722)
	org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
	org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)
	br.com.xx.yyy.projeto.dao.impl.ProjetoDAOImpl.listUltimosProjetosByIdUsuario(ProjetoDAOImpl.java:1356)
	br.com.xx.yyy.projeto.service.impl.ProjetoServiceImpl.listUltimasCampanhas(ProjetoServiceImpl.java:2504)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
	org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
	org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)

Sera que ainda falta alguma dependencia?

Meu ehcache.xml esta assim:

<?xml version="1.0" encoding="UTF-8"?>

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:noNamespaceSchemaLocation="ehcache.xsd">
 
 
 	<diskStore path="java.io.tmpdir" />
 
 	<defaultCache maxElementsInMemory="10000"
    	eternal="false"
       	timeToIdleSeconds="120" timeToLiveSeconds="180"
       	overflowToDisk="true" diskPersistent="false"
       	diskExpiryThreadIntervalSeconds="120"
       	memoryStoreEvictionPolicy="LRU" />
</ehcache>

Boa noite Pedrosa,

Você achou a causa raíz desse problema?

Opa!

Passei pelo mesmo problema, resolvi adicionado o método “addScalar”, responsável por informar cada coluna / ou alias, e o tipo (esperados no retorno da query). Exemplo:

final SQLQuery sqlQuery = session.createSQLQuery(sqlNative.toString());
sqlQuery.setCacheable(true);
sqlQuery.setCacheRegion(“clienteDAO.getDadosCliente”);
sqlQuery.addScalar(“nome”, new StringType());
sqlQuery.addScalar(“dtSituacao”, new DateType());
sqlQuery.addScalar(“vlPrazoPagamento”, new IntegerType());
sqlQuery.setResultTransformer(Transformers.aliasToBean(MeuDTO.class));
final MeuDTO teste = (MeuDTO) sqlQuery.uniqueResult()

Att,
Ortiz